我无法正确覆盖继承的对象,想知道我是否可以在这里得到帮助。已经卡了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
仅使用 serviceArea()
仅指Person
范围内定义的函数serviceArea
:
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;
}
如果要使用子类实现的serviceArea
方法,请改用this.serviceArea()
。
此外,构造函数不应返回值;而是将值直接附加到this
值。