1. 程式人生 > 其它 >原型式繼承簡單測試

原型式繼承簡單測試

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 說明同樣是例項屬性,而非新增到原型上