【发布时间】:2015-09-16 20:53:37
【问题描述】:
我正在用 Javascript 编写一些 OOP 代码,继承的设计提出了一个问题。像Java一样,超级构造函数调用应该是Javascript子类构造函数的第一行吗?
var Effect = function (container, height, width) {};
var XEffect = function (container, height, width, resource) {
Effect.call(container, height, width ); // really necessary to be first line?
};
【问题讨论】:
-
应该是,如果构造函数要做的第一件事是运行另一个构造函数。如果这不是你想要的,那么它不应该是。
Effect构造函数是否执行对XEffect实例至关重要的操作?如果是这样,请调用它。 -
JS 中的
.call并没有像你想象的那样做。.call调用一个函数,其中第一个参数绑定为函数内部的this,所有其余参数作为参数传入。它与继承本身无关,但如果您将this作为您的this值传入它可以在继承模式中使用(感到困惑吗?)。 -
应该是
Effect.call(this, container, height, width);
标签: javascript oop inheritance constructor