javascript - 与 Java 一样,Object.call 也应该是 Javascript 构造函数中的第一个调用吗?

标签 javascript oop inheritance constructor

我正在用 Javascript 编写一些 OOP 代码,继承的设计提出了一个问题。像Java一样, super 构造函数调用应该是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?
};

最佳答案

引用Douglas Crockford的话:“JavaScript有一个无类的对象系统,其中对象直接从其他对象继承属性。这确实很强大,但对于受过经典训练的程序员来说是陌生的。如果你尝试直接应用经典设计模式对于 JavaScript,你会感到沮丧。但是如果你学会使用 JavaScript 的原型(prototype)性质,你的努力将会得到返回。”

查看Object.prototype了解 JavaScript 中如何处理继承。

在您的代码片段中,Effect.call(container, height, width); 将简单地评估为 undefined 除非您事先明确定义它。要调用 Effect 函数的功能,您只需将其调用为 Effect()

关于javascript - 与 Java 一样,Object.call 也应该是 Javascript 构造函数中的第一个调用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31131845/

相关文章:

java - 访问多个 JpaRepositories 之前和之后运行函数

c++ - 构造函数错误 : expected ‘{’ at end of input

c# - C# 中继承的奇怪行为

javascript - react 功能 Prop

javascript - 根据订单状态有条件地改变 rails 中的背景颜色

javascript - Cocos2D-JS可以加密源代码吗?

javascript - 在 Vanilla javascript中向ajax帖子添加变量

C++:使用重载而不是动态转换通过基类选择派生类

javascript - 为什么人们不使用 Object.defineProperty 作为 polyfill?

java - 对象和类关系的含义