我疯狂地用谷歌搜索了这个,但我还是不明白。
如果我设置子对象和父对象如下:
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();
将子构造函数创建的原型(prototype)设置为父构造函数创建的原型(prototype)。因此,如果没有这一行,则该行
Parent.call(this, name);
(我相信调用 Parent 构造函数,将 this 上下文设置为 Child,并传入名称)实际上不应该工作。
我的理解有什么问题吗?
预先感谢您的帮助! :)
最佳答案
Javascript 不知道函数是构造函数。仅当您使用 new
关键字调用它时,它才会被视为一个。如果您在没有 new
的情况下调用它,它的行为会有所不同。
Parent.call(this, name)
只需使用新构造的 Child
将 Parent
作为常规函数调用(因为您使用了构建子级时的 new
关键字)作为其 this
。
因此,在这种情况下,您的函数 parent
所做的就是将名称分配给它收到的对象。在本例中,是您刚刚构造的 Child
。
将您的 child 与此进行比较:
var Child = function(name, toy)
{
var child = new Parent(name);
child.toy = toy;
return child;
}
这里,子函数使用 Parent
作为构造函数。
关于javascript - 链接 Javascript 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18381660/