原型式继承简单测试
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 说明同样是实例属性,而非添加到原型上