1

我已经疯狂地用谷歌搜索了这个,我仍然不明白。

如果我设置子对象和父对象,如下所示:

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 构造函数,将 this 上下文设置为 Child,并传入名称)实际上不应该工作。

我的理解有什么问题?

提前感谢您的帮助!:)

4

1 回答 1

0

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

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

因此,在这种情况下,您的所有功能parent所做的就是将名称分配给它收到的对象。在这种情况下,Child您刚刚构建的 。

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

var Child = function(name, toy)
{
    var child = new Parent(name);
    child.toy = toy;
    return child;
}

在这里,子函数Parent用作构造函数。

于 2013-08-22T13:34:46.640 回答