复制javascript原型实例?

时间:2012-04-10 09:39:45

标签: javascript prototype

我给了一个名为“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();
}

2 个答案:

答案 0 :(得分:2)

确定。这里

var copy = obj.constructor();

只是一个函数调用,构造函数Node不会返回任何内容。您必须使用new关键字来创建新对象。

var copy = new obj.constructor();

答案 1 :(得分:1)

var copy = obj.constructor();

此行使用obj的构造函数,调用它并将结果分配给copy

由于objNode,根据行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,因此undefinedreturn copy;

最后,

clone

您从{{1}}函数返回此未定义的值。