使用/不使用原型

时间:2015-10-09 14:39:17

标签: javascript inheritance

我正在努力学习继承。如果我在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');};

1 个答案:

答案 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,以防人们想玩:)