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
相關文章
相關標籤/搜索