如何在javascript中扩展现有的构造函数
How to extend existing constructor function in javascript?
让我们假设我有以下对象函数:
function A(options){
...
}
然后我想创建一个新的函数(B),它继承了a的原型。这些是我正在寻找的条件:
- 如果修改了B的原型,则不应修改A的原型
- 当作为构造函数调用B函数时,应该使用相应的选项来调用a的构造函数
B应该是这样的:
函数B(aOptions,bOptions){…}
var b = new B({}, {})
只需使用this
调用A
构造函数
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的原型中的任何新方法都将不可用于A的原型
还有一些其他的调整也可以让你的生活更轻松。
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)
将得到相同的结果。
相关文章:
- ES6构造函数返回基类的实例
- 使用Google Visualization动态调用构造函数
- 为什么我需要为扩展函数设置构造函数
- 扩展 pixi.js在构造函数中对访问父的属性进行精灵化
- 在 JavaScript ES2015 中,在扩展类时,我们是否需要显式创建一个新的构造函数,或者我们是否可以只使用父类
- 如何将对象的构造函数传递给 Chrome 扩展程序中的另一个页面
- Javascript子类化,超级构造函数和使用自定义扩展会丢失基类方法
- 将构造函数从单独的文件加载到 Chrome 扩展程序选项页面
- 打字稿覆盖构造函数中的扩展属性
- 检查构造函数调用是否来自扩展类
- 如何在javascript中扩展现有的构造函数
- 如何扩展像Object或Number这样的内建函数的构造函数
- 在扩展类中运行构造函数
- 使用自己的逻辑/旁路构造函数扩展库
- 如何从本机构造函数typescript扩展
- 当我需要使用带参数的构造函数时,如何使用Rhino继承(扩展)Java类?
- 是否“使用严格的”?在构造函数中扩展到原型方法
- 测试主干扩展构造函数继承的好方法是什么?
- JS扩展构造函数类
- 扩展 jQuery 在每个方法调用上调用构造函数