Javascript分配原型混淆

Javascript assigning prototype confusion

var object1 = {
    name: "abc",
    age: 21
}

var Object2 = function() {}
Object2.prototype = object1;
Object2.prototype.hello = function() {
    console.log("Hello");
}

var obj = Object.create(object1);
for (var prop in obj) {
    console.log(prop + ": " + obj[prop]);
}

这段代码的输出是:

name: abc
age: 21
hello: function () {
    console.log("Hello");
}

Obj 是通过将其原型设置为 object1 创建的,它没有 'hello' 函数,那么为什么它会列在输出中?如果我注释掉 'Object2.prototype = object1;','hello' 函数将不再显示在输出中。我看不到 obj 和 Object2 是如何连接的。谁能解释一下这里发生了什么?

在这一行之后...

Object2.prototype = object1;

... Object2.prototypeobject1 指的是同一个对象。因此这一行...

Object2.prototype.hello = function() { // ...

... 将新的 属性 分配给 object1 引用的对象。

I don't see how obj and Object2 are connected.

使用 var obj = Object.create(object1),您创建一个 __proto__ 属性 指向 object1 的对象。正如我们所确定的,后者实际上是 Object2.prototype 指向的同一个对象。


I.e setting Object2.prototype to an object without them both referring to the same object?

如果您只想 Object2.prototypeobject1 复制属性,只需 clone an object.