JS嵌套继承

时间:2016-09-27 22:36:29

标签: javascript inheritance prototypal-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

1 个答案:

答案 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值。