我总是对人们试图将某种形式的经典继承强制到 javascript 中的方式感到惊讶。我设计了一种方法来在某些对象 b 中继承对象 a 的原型方法,而无需将对象 b 的原型方法添加到对象 a,并且可以使用从1继承的对象的私有变量。现在我很好奇:你会说这真的是原型“继承”吗?是一种可行的方法吗?它有缺陷吗?
这是一些示例代码:
Object.prototype.inheritsFrom = function(obj){
var prototo = this.prototype,
protofrom = obj.prototype;
for (var l in protofrom) {
if (protofrom.hasOwnProperty(l)){
prototo[l] = protofrom[l];
}
}
}
function Obj1(){
var const1 = 25;
if (!Obj1.prototype.getConst1){
Obj1.prototype.getConst1 = function(){
return const1;
}
}
}
function Obj2(){
var const2 = 50;
if (!Obj2.prototype.getConst2){
Obj2.prototype.getConst2 = function(){
return const2;
}
}
Obj2.inheritsFrom(Obj1);
}
var instanceA = new Obj1,
instanceB = new Obj2;
现在instanceA
包含方法getConst1
、instanceB
包含方法getConst1
和getConst2
,正如您在这个 jsfiddle中看到的那样。
1通过在构造函数中分配原型方法,有效地使用由它创建的闭包。