javascript - 链接 Javascript 构造函数

标签 javascript constructor-chaining

我疯狂地用谷歌搜索了这个,但我还是不明白。

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

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) 只需使用新构造的 ChildParent 作为常规函数调用(因为您使用了构建子级时的 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/

相关文章:

java - Java 中的链接构造函数

php - 是否可以在 PHP 中链式重载构造函数?

java - 我只想在多级继承中调用子类构造函数?

c++ - int float 的问题

javascript - 如何测试这种依赖性?

javascript - JavaScript 中的 for 循环/赋值

javascript事件onkeypress事件不会运行

javascript - 使用 jQuery 滚动一个 div

Delphi:何时重新引入隐藏祖先以及何时显示它们?

javascript - 比较数组内的值、计算它们并合并表中的行