使用javascript继承访问父类成员?

时间:2013-01-25 18:57:13

标签: javascript class inheritance parent children

我需要在javascript中扩展一个带有附加功能的基类。我在这里使用backbone.js继承作为示例,但这是关于扩展类的一般性问题。

http://addyosmani.github.com/backbone-fundamentals/#inheritance-mixins

Parent = Backbone.View.extend({
    value: "Parent value",
    func: function(){
        alert('Parent function, ' + this.value);
    }
});

Child = Parent.extend({
    value: "Child value",
    func: function(){
        alert('Child function, ' + this.value);
    },
    test: function(){
        this.constructor.__super__.func.call(this);
        //Parent.prototype.func.call(this)
    }
});

var child = new Child();

child.test();

// prints: Parent function, Child value
// should print: Parent function, Parent value

这是一个jsfiddle沙箱,可以简化实验。

问题是extend()似乎更像是接口实现而不是继承。所以Child仍然是Parent,但有额外的成员函数。 “value”成员似乎是虚拟的,因此只有一个实例,而不是每个后代一个。在c ++中,我可以说Parent :: func()和内部,this->值将是“父值”。

我已经尝试过对backbone.js的各种._super扩展,但他们仍然遭受来自“this”在Parent中的错误上下文。我也在/ Child / Parent中尝试了_.bindAll(),但由于同样的原因它失败了:

initialize: function() {
    _.bindAll(this, 'func');
}
  1. 将“this”作为javascript中Parent的正确上下文,或者至少用最少的代码模拟该功能,最简洁的方法是什么?

  2. 我是否需要在Child中创建一个“父”成员并实例化它以为每个后代创建“值”成员?

0 个答案:

没有答案