乐趣区

javascript原型链及继承的理解

原型链及继承的理解
定义函数
function A(name) {
// 构造内容 (构造函数)
this.name = name;

/*
// 也支持定义方法。但为了性能,不建议在构造里定义方法
this.fn = function(parmas){
// your code
}
*/
}

// 原型链
A.prototype.changeName = function(name) {
this.name = name;
}

// 静态属性
A.staticPF = ‘static12345’;

继承
继承构造函数
function B(name) {
// B 继承 A 的构造函数 也可用 apply
A.call(this, name);
}
// console.log(B)

var b = new B(‘ccc’);
console.log(b.name); // => ccc

继承静态属性
// B 继承 A 的静态属性,查找流程如下
// B.staticPF = >B.__proto__.staticPF => A.staticPF;
B.__proto__ = A;
console.log(B.staticPF); // => static12345

继承原型链
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

退出移动版