1

我得到了一个名为“Node”的原型的实例“aNode”。在此讨论之后,我尝试:

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.conturctor() 正确地引用了 aNode 的构造函数,但 copy 是“欠精细的”。找不到原因:(

这种方法是错误的,还是我错过了什么:)?

谢谢,J。

编辑:这是 Node 原型的样子:

Node.prototype = new PhysicsNode();
Node.prototype.constructor=Node;

function Node() {

    PhysicsNode.call(this);

    this.setBounds(0, 0, 0, 0);
    this.createStaticBody();
}
4

2 回答 2

2

好的。这里

var copy = obj.constructor();

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

var copy = new obj.constructor();
于 2012-04-11T03:42:55.720 回答
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();

没有分配任何东西obj所以objundefined

最后,

return copy;

你从你的clone函数返回这个未定义的值。

于 2012-04-10T16:20:09.037 回答