我无法正确覆盖继承的对象,并想知道我是否可以在这里找到帮助。已经被困了3天了。
说
function Person() {
function getValue(){
serviceArea();
}
function serviceArea() {
alert('Old Location');
}
return {
getValue: getValue,
serviceArea: serviceArea
}
}
然后
function Student() {};
Student.prototype = new Person();
Student.prototype.serviceArea = function() { alert('New Location'); };
var bobStu = new Student();
当我运行bobStu.serviceArea();
时,我得到'New Location'
,但是当我运行bobStu.getValue();
时,我得到'Old Location'
我将这个bobStu.getValue();
传递给需要调用重写方法的方法,但我无法做到这一点。你能解释为什么getValue()
正在调用旧的serviceArea()
吗?以及如何正确地做到这一点?
我已经多次读过这篇文章了,觉得它告诉了我一些东西,但是我太烧了,以至于我无法得到它:( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript#Namespace
答案 0 :(得分:3)
仅使用serviceArea()
仅指serviceArea
范围内定义的函数Person
:
function Person() {
function getValue(){
serviceArea(); // this...
}
// ...always refers to this, independent of the object you're constructing
function serviceArea() {
alert('Old Location');
}
// also note this:
this.getValue = getValue;
this.serviceArea = serviceArea;
}
如果您想使用子类实现的this.serviceArea()
方法,请使用serviceArea
。
此外,构造者不应该返回值;将值直接附加到this
值。