javascript:void(null)# 原型鏈及繼承的理解
定義函數(shù)
function A(name) {
// 構(gòu)造內(nèi)容(構(gòu)造函數(shù))
this.name = name;
/*
// 也支持定義方法。但為了性能,不建議在構(gòu)造里定義方法
this.fn = function(parmas){
// your code
}
*/
}
// 原型鏈
A.prototype.changeName = function(name) {
this.name = name;
}
// 靜態(tài)屬性
A.staticPF = 'static12345';
繼承
繼承構(gòu)造函數(shù)
function B(name) {
// B 繼承 A 的構(gòu)造函數(shù) 也可用apply
A.call(this, name);
}
// console.log(B)
var b = new B('ccc');
console.log(b.name); // => ccc
繼承靜態(tài)屬性
// B 繼承 A 的靜態(tài)屬性,查找流程如下
// 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實例最終繼續(xù)了A的changeName方法
console.log(b.name); // => ddd