我们假设我有以下对象函数:
function A(options){
...
}
Run Code Online (Sandbox Code Playgroud)
然后我想创建一个继承A原型的新函数(B).这些是我正在寻找的条件:
B应如下所示:
功能B(aOptions,bOptions){...}
var b = new B({}, {})
Run Code Online (Sandbox Code Playgroud)
只需调用A构造函数this
function B(aOptions, bOptions) {
A.call(this, aOptions);
// do stuff with bOptions here...
}
Run Code Online (Sandbox Code Playgroud)
现在设置原型
B.prototype = Object.create(A.prototype, {
constructor: {
value: B
}
});
Run Code Online (Sandbox Code Playgroud)
现在B将有来自A的原型方法.
添加到B原型的任何新方法都无法用于A的原型
还有一些其他的调整可以让你的生活更轻松.
function A(options) {
// make `new` optional
if (!(this instanceof A)) {
return new A(options);
}
// do stuff with options here...
}
Run Code Online (Sandbox Code Playgroud)
为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...
}
Run Code Online (Sandbox Code Playgroud)
现在您可以致电A(options)或new A(options)获得相同的结果.
与B相同,B(aOptions, bOptions)或者new B(aOptions, bOptions)会得到相同的结果.