JS嵌套继承

JS nested inheritance

我无法正确覆盖继承的对象,想知道我是否可以在这里得到帮助。已经卡了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

Using just 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()

此外,构造函数不应该 return 值;而是将值直接附加到 this 值。