我正在努力学习继承。如果我在SuperClass中定义我的方法superPrint()
,我将无法使用子实例
例如:new ChildClass().superPrint();
//引发错误fn not available
/*Parent Class*/
var SuperClass= function(){
this.name = '';
this.superPrint = function(){console.log('Doesnt Work');};
}
/*Child Class*/
var ChildClass= function(){
this.print=function(){
console.log('Always works');
}
}
/*Child method inheriting from the parent method*/
ChildClass.prototype = Object.create(SuperClass.prototype);
/*Instantiating the child method*/
var obj = new ChildClass();
obj.print();//This works
obj.superPrint();//This gives error *******
但如果使用原型定义函数superPrint()
则可行。为什么?
(现在使用new ChildClass().workingPrint();
调用它可以工作)
/*Parent Class*/
var SuperClass= function(){
this.name = '';
}
SuperClass.prototype.workingPrint = function(){console.log('This Works');};
答案 0 :(得分:0)
我认为,如果SuperClass
的功能未明确定义为原型,则ChildClass
的任何对象都无法使用它。如果不是这种情况,则ChildClass
的实例将无法访问SuperClass
实例的功能
因此,这将有效:
SuperClass= function(){
}
SuperClass.prototype.superPrint = function(){
console.log('Use prototype to inherit');
};
ChildClass= function(){
this.print=function(){
}
}
ChildClass.prototype = Object.create(SuperClass.prototype);
var obj = new ChildClass();
obj.print();
obj.superPrint();
以下是fiddle,以防人们想玩:)