链接Javascript构造函数

时间:2013-08-22 13:20:26

标签: javascript constructor-chaining

我用疯狂的Google搜索了这个,我仍然不明白。

如果我设置如下的子对象和父对象:

var Child = function(name, toy)
{
    this.toy = toy;
    Parent.call(this, name);
}

var Parent = function(name)
{
    this.name = name;
}

//Child.prototype = new Parent();

需要取消注释以上行,以便能够获得以下结果:

var bobby = new Child("Robert", "Lego");
document.write(bobby.name + " " + bobby.toy);

//Result: Robert Lego

我的(可能是不正确的)理解是该行

Child.prototype = new Parent();

将Child构造函数创建的原型设置为Parent构造函数创建的原型。因此,没有这一行,行

Parent.call(this, name);

(我认为调用Parent构造函数,将此上下文设置为Child,并传递名称)实际上不应该有效。

我的理解有什么问题?

提前感谢您的帮助! :)

1 个答案:

答案 0 :(得分:0)

Javascript不知道函数是构造函数。当您使用new关键字调用它时,它仅被视为一个。如果您在没有new的情况下调用它,它的行为会有所不同。

Parent.call(this, name)只需将Parent作为常规函数调用,使用新构造的Child(因为您在构造Child时使用了new关键字)作为其{{ 1}}。

因此,在这种情况下,您的所有函数this都会将名称分配给它收到的对象。在这种情况下,您刚刚构建的parent

将您的孩子与此进行比较:

Child

这里,子函数使用var Child = function(name, toy) { var child = new Parent(name); child.toy = toy; return child; } 作为构造函数。