我正在学习Javascript中面向对象编程的旅程.我从这里获得了这个视频版本http://www.objectplayground.com/我理解了相当多的原型方法而不是经典方法.
在观察内容时,我暂停了显示的经典方法与子类一起使用的示例,如下所示:
//superclass function Answer(value){ this._val = value; } //define prototype property 'get' for the superclass Answer.prototype.get = function fn1(){ return this._val; } //subclass function FirmAnswer(value){ Answer.call(this,value); } FirmAnswer.prototype = Object.create(Answer.prototype); FirmAnswer.prototype.constructor = FirmAnswer; //define prototype property 'get' for subclass FirmAnswer.prototype.get = function fn2(){ return Answer.prototype.get.call(this); } var luckAnswer = new FirmAnswer(7); luckAnswer.get(); //7
题:
从我的理解call
函数,它将设置this
当前上下文是例如从该行Answer.call(this,value)
从FirmAnswer
功能,所以_val
从Answer
会为设置FirmAnswer
而不是为Answer
(请纠正我,如果我错了).
因此,如果上述分析是正确的,那么它会导致我的混淆,为什么返回的get
属性而不仅仅是因为已经设置为调用时?FirmAnswer.prototype
Answer.prototype.get.call(this)
Answer.prototype.get()
this
FirmAnswer
new FirmAsnwer(7)
请给我一些启示,因为我现在很困惑.我很确定我很了解原型方法,但经典方法让我很困惑.
先感谢您!