我用疯狂的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,并传递名称)实际上不应该有效。
我的理解有什么问题?
提前感谢您的帮助! :)
答案 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;
}
作为构造函数。