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.prototype
和 object1
指的是同一个对象。因此这一行...
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.prototype
从 object1
复制属性,只需 clone an object.
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.prototype
和 object1
指的是同一个对象。因此这一行...
Object2.prototype.hello = function() { // ...
... 将新的 属性 分配给 object1
引用的对象。
I don't see how
obj
andObject2
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.prototype
从 object1
复制属性,只需 clone an object.