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

如何在javascript中扩展现有的构造函数?,javascript,Javascript,假设我有以下对象函数: function A(options){ ... } 然后我想创建一个继承a原型的新函数B。 以下是我正在寻找的条件: B的原型,如果被修改,不应该修改A的原型 当作为构造函数调用B函数时,应使用相应的选项调用a的构造函数。 B应该是这样的: 函数选项,选项{…} 用这个函数调用一个构造函数 现在来设置原型 B.prototype = Object.create(A.prototype, { constructor: { value: B } });

假设我有以下对象函数:

function A(options){
 ...
}
然后我想创建一个继承a原型的新函数B。 以下是我正在寻找的条件:

B的原型,如果被修改,不应该修改A的原型 当作为构造函数调用B函数时,应使用相应的选项调用a的构造函数。 B应该是这样的:

函数选项,选项{…}

用这个函数调用一个构造函数

现在来设置原型

B.prototype = Object.create(A.prototype, {
  constructor: {
    value: B
  }
});
现在B将从A获得原型方法

任何添加到B的原型中的新方法将不适用于A的原型

B.prototype = Object.create(A.prototype, {
  constructor: {
    value: B
  }
});
还有一些其他的调整可以让你的生活更轻松

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...
}
现在您可以调用aooptions或newaooptions来获得相同的结果

与B、B选项、B选项或新B选项相同,B选项将得到相同的结果。

只需使用此选项调用构造函数即可

现在来设置原型

B.prototype = Object.create(A.prototype, {
  constructor: {
    value: B
  }
});
现在B将从A获得原型方法

任何添加到B的原型中的新方法将不适用于A的原型

B.prototype = Object.create(A.prototype, {
  constructor: {
    value: B
  }
});
还有一些其他的调整可以让你的生活更轻松

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...
}
现在您可以调用aooptions或newaooptions来获得相同的结果


与B、BaOptions、BOOPTIONS或new BaOptions相同,BOOPTIONS将获得相同的结果。

Javascript是一种经典的继承机制。在MDN上可以找到许多JS问题的答案:不需要两个选项。您可以传递一个函数,让函数使用或修改应用于该特定函数的任何内容。更多关于原型和向函数链传递参数的信息,请参见:Javascript是一种经典的继承机制。许多JS问题的答案都可以在MDN上找到:不需要两个选项。您可以传递一个函数,让函数使用或修改应用于该特定函数的任何内容。更多关于原型和向函数链传递参数的信息:那么,在函数b中,这个函数的值是多少???。假设我用var a=new a调用函数b。这一点是a还是其他点???@AvinashBabu这里的所有代码都不对a进行修改。new a调用a,不是B。当你调用new B时,它的值将指向B的一个实例。因此,如果我调用var B=new B,那么this将指向变量B right???@AvinashBabu var B=new B将给你一个新的B实例,是的,那么这个函数在函数b中的值是什么呢???。假设我用var a=new a调用函数b。。这一点是a还是其他点?@AvinashBabu这里所有的代码都不对a进行修改。new a调用a,不是B。当你调用new B时,这个值将指向B的一个实例。因此,如果我调用var B=new B,那么这个值将指向变量B,对吗???@AvinashBabu var B=new B将给你一个新的B实例,是的。