【发布时间】:2019-11-29 07:42:58
【问题描述】:
所以我想了解o1.prototype = Object.create(o2.prototype) 和o1.prototype = o2.prototype 之间的区别。
根据this question 的回答,前者将 obj2.prototype 设置为 obj1.prototype 的原型,但我很难理解你为什么想要那个(例如新原型的原型只是 Object.prototype 因为原型是一个没有进一步继承的对象)。此外,它似乎并不像该问题的答案一直暗示的那样有效。
以如下代码为例:
function o1(){}
o1.prototype.test = "test";
function o2(){}
o2.prototype = Object.create(o1.prototype);
let instance1 = Object.create(o1);
console.log(o2.prototype.test, instance1.prototype.test);
o2.prototype.test 和 instance1.prototype.test 都打印 "test"。因此,将o2 直接分配给Object.create(o1.prototype) 或将o2 的原型设置为Object.create(o1.prototype) 似乎无关紧要。
另外,如果我正确理解这一点,根据链接问题中的答案,如果o1 为空(在这种情况下就是这样),那么设置o2 = o1 将与设置@987654334 相同@ 也与
function o1(){};
function o2(){};
o2.prototype = o1.prototype;
这三者之间有什么显着差异吗?另外,如果o2.prototype = Object.create(o1.prototype)创建了一个empty对象,以o1.prototype的原型作为自己的原型,如果o1的原型不为空,那么o1的成员怎么办? s原型被导入o2的原型?
【问题讨论】:
-
“我很难理解你为什么想要那个”——你不会想要它,没错 :-)
-
你可能打算使用
instance1 = new o1();(Object.create(o1.prototype))而不是instance1 = Object.create(o1);。
标签: javascript inheritance assign