如何在javascript中扩展现有的构造函数?

时间:2014-10-10 16:17:15

标签: javascript

假设我有以下对象函数:

function A(options){
 ...
}

然后我想创建一个继承A&B的原型的新函数(B)。 这些是我正在寻找的条件:

  • B&#39的原型,如果修改,不应修改A
  • 当调用B函数作为构造函数时,应该使用相应的选项调用A的构造函数。

B应如下所示:

  

功能B(aOptions,bOptions){...}

var b = new B({}, {})

1 个答案:

答案 0 :(得分:7)

只需使用A

调用this构造函数即可
function B(aOptions, bOptions) {
  A.call(this, aOptions);

  // do stuff with bOptions here...
}

现在设置原型

B.prototype = Object.create(A.prototype, {
  constructor: {
    value: B
  }
});

现在B将拥有A的原型方法。

添加到B&B的原型中的任何新方法可用于A&#39的原型


还有其他一些调整可以让你的生活更轻松。

function A(options) {

  // make `new` optional
  if (!(this instanceof A)) {
    return new A(options);
  }

  // do stuff with options here...
}

为B

做同样的事
function B(aOptions, bOptions) {

  // make `new` optional
  if (!(this instanceof B)) {
    return new B(aOptions, bOptions);
  }

  // call parent constructor
  A.call(this, aOptions);

  // do stuff with bOptions here...
}

现在,您可以致电A(options)new A(options)以获得相同的结果。

与B相同,B(aOptions, bOptions)new B(aOptions, bOptions)会得到相同的结果。