我给了一个名为“Node”的原型的“aNode”实例。 Following this discussion,我试图:
var newNode = clone(aNode);
克隆功能如下:
function clone(obj) {
if (null == obj || "object" != typeof obj) return obj;
var copy = obj.constructor();
for (var attr in obj) {
if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr];
}
return copy;
}
尽管obj.consturctor()正确引用了aNode的构造函数,但copy仍然是“underfined”。找不到原因:(
这种方法是错误的,还是我错过了什么:)?
谢谢, 学家
编辑:这是Node原型的样子:
Node.prototype = new PhysicsNode();
Node.prototype.constructor=Node;
function Node() {
PhysicsNode.call(this);
this.setBounds(0, 0, 0, 0);
this.createStaticBody();
}
答案 0 :(得分:2)
确定。这里
var copy = obj.constructor();
只是一个函数调用,构造函数Node
不会返回任何内容。您必须使用new
关键字来创建新对象。
var copy = new obj.constructor();
答案 1 :(得分:1)
var copy = obj.constructor();
此行使用obj
的构造函数,调用它并将结果分配给copy
。
由于obj
是Node
,根据行Node.prototype.constructor=Node;
,obj.constructor === Node
保留Node
。
查看函数function Node() {
PhysicsNode.call(this);
this.setBounds(0, 0, 0, 0);
this.createStaticBody();
}
:
new
此函数是构造函数,必须使用new
关键字调用它。如果没有使用return
关键字调用它,它只是一个常规函数。由于没有 var copy = obj.constructor();
语句,此函数返回 nothing 。
因此,
obj
将无分配给obj
,因此undefined
为return copy;
。
最后,
clone
您从{{1}}函数返回此未定义的值。