原型式继承简单测试

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 说明同样是实例属性,而非添加到原型上

 

posted @ 2021-10-02 16:04  TwinkleG  Views(28)  Comments(0)    收藏  举报