做網(wǎng)站時(shí)分類標(biāo)題和分類描述搜索詞和關(guān)鍵詞
帶著問(wèn)題看代碼:
1、原始的繼承是怎樣實(shí)現(xiàn)繼承的? A類的prototype 屬性 = B類的實(shí)例
2、實(shí)現(xiàn)繼承后,連B類的中實(shí)例的屬性(放在了A類的prototype中)和原型鏈的上的東西都可以用
3、A.prototype.constructor實(shí)際上已經(jīng)指向了B–被重寫了(但是不影響對(duì)實(shí)際代碼運(yùn)行的理解)
4、原型鏈繼承,是往上找,找到了直接就用了,就不再往上找了
function subType (j) {this.name = 'subType'this.nameJ = j
}
subType.prototype.getValue = function () {return 'subType原型上的值'
}function deviceType (k) {this.nameOther = 'deviceTye'this.nameK = k
}
// 這種方法實(shí)現(xiàn)的繼承,就是連constructor中的屬性就也給繼承了
deviceType.prototype = new subType()
deviceType.prototype.getValueOther= function() {return 'deviceType原型鏈上的值'
}let instance = new deviceType(99)// 繼承的表現(xiàn),可以看到自己原型上的,和繼承某個(gè)實(shí)例對(duì)象原型鏈上的東西
console.log(instance.nameOther) // deviceTye
console.log(instance.name) // subType
console.log(instance.getValueOther()) // deviceType原型鏈上的值
console.log(instance.getValue()) // subType原型上的值// 這行打印可以看到是怎樣的,(繼承某個(gè)實(shí)例的屬性)會(huì)放在deviceType.prototype.
console.log(instance.__proto__) // { name: 'subType', getValueOther: [Function (anonymous)] }// 會(huì)發(fā)現(xiàn)被重寫了
console.log(instance.constructor) // [Function: subType]
// 打印一下完整的原型鏈
console.log(instance.__proto__.__proto__.constructor) // [Function: subType]// 雖然被重寫了,但是不影響實(shí)例化
console.log(instance.nameK) // 99
console.log(instance.nameJ) // undefined