原型链及继承的理解

最后更新于:2022-04-02 04:24:14

# 原型链及继承的理解 ##### 定义函数 ```js function A(name) { // 构造内容(构造函数) this.name = name; /* // 也支持定义方法。但为了性能,不建议在构造里定义方法 this.fn = function(parmas){ // your code } */ } ``` ```js // 原型链 A.prototype.changeName = function(name) { this.name = name; } ``` ```js // 静态属性 A.staticPF = 'static12345'; ``` ##### 继承 ###### 继承构造函数 ```js function B(name) { // B 继承 A 的构造函数 也可用apply A.call(this, name); } // console.log(B) var b = new B('ccc'); console.log(b.name); // => ccc ``` ###### 继承静态属性 ```js // B 继承 A 的静态属性,查找流程如下 // B.staticPF = >B.__proto__.staticPF => A.staticPF; B.__proto__ = A; console.log(B.staticPF); // => static12345 ``` ###### 继承原型链 ```js var b = new B('ccc'); // B 继承 A 的原型链, 3种方式,推荐第3种 // B.prototype = A.prototype; // 需要前置在b对象实例化前 // b.__proto__ = A.prototype; // B.prototype.__proto__ = A.prototype; B.prototype.__proto__ = A.prototype; b.changeName('ddd') // b实例最终继续了A的changeName方法 console.log(b.name); // => ddd ```
';