JavaScript在不调用超类构造函数的情况下创建派生类

时间:2013-04-16 10:41:46

标签: javascript

所以我通过使用它们的构造函数来定义类,并在这些函数中定义它们的所有属性,并做构造函数,比如设置监听器等。在定义构造函数之后,我将其所有函数直接添加到其原型中。

要做继承,我基本上是这样做的:

namespace.Class = function(param) {
    namespace.BaseClass.call(this, param);

    //Other constructor stuff
}

namespace.Class.prototype = new namespace.BaseClass();
namespace.Class.constructor = namespace.Class;

问题是在创建原型时会调用BaseClass的构造函数,这会导致原型成为该类型的实例。这可能不是问题,但它只是感觉“凌乱”和性能滞后,并且可能有错误,因为我必须检查是否定义了参数。

所以我的问题是:是否可以在不调用其构造函数的情况下扩展基类?或者我是否必须使用诸如检查param是否未定义或使用循环做东西?

很抱歉,如果我错过了原型继承的全部内容,我正在大学教授Java,而Java则不赞成这种类型的东西。

1 个答案:

答案 0 :(得分:4)

是的,这是可能的。首选方法是使用Object.create [MDN]

namespace.Class.prototype = Object.create(namespace.BaseClass.prototype);

这会创建一个新的空对象,它继承自BaseClass.prototype,这就是您需要的所有内容。

这是一个比创建父类实例更清晰的解决方案,因为正如您已经提到的,如果超类需要参数,则不知道要传递哪些参数。