原型式繼承簡單測試
阿新 • • 發佈:2021-10-02
1. 今天遇到了一些問題,複習了一下原型式繼承... 詳細講解在:https://www.cnblogs.com/twinkleG/p/15325715.html
2. 原型式繼承 目的是 實現一個物件屬性被例項所共享,上程式碼:
function func(obj) { function f() {}; f.prototype = obj; return new f(); } let person = { name: 'James', color: ['blue'] };
測試一下,修改屬性是在新增例項屬性覆蓋原型物件的屬性,還是直接修改原型物件的屬性
let p1 = func(person); let p2= func(person); p1.color.push('red'); console.log(p2.color); // [ 'blue', 'red' ] 說明確實實現了共享 console.log(p1.name); // James p1.name = 'hello'; console.log(p1.__proto__.name); // James console.log(p1.name); // hello 說明在這裡是在例項上新增屬性,覆蓋了原型的 name 屬性,而不是直接修改了原型的 name console.log(p2.name); // James
使用 Object.create() 測試:
// Object.create() 是原型式繼承的規範化方法 let p3 = Object.create(person, { myValue: { value: 'something' } }); console.log(p3.name + p3.color); console.log(p3.myValue); // something console.log(p3.__proto__.myValue); // undefined 說明同樣是例項屬性,而非新增到原型上