Firefox上的JavaScript类继承奇怪行为

时间:2013-06-05 11:39:38

标签: javascript firefox inheritance backbone.js

我正在使用Backbone应用程序,并且有一些视图继承自我的其他自定义视图。为了继承父视图定义的事件,我在子的构造函数中使用了_.extend({}, superEvents, this.events)。这在除了Firefox之外的任何地方都可以。在Firefox(在21上测试)中,扩展事件仅包括超级事件,没有使用this.events定义的事件。

以下是代码。也做了一个小提琴here

var ParentView = Backbone.View.extend({
    events: {
        'click .nav-icon.cancel': 'hideView'
    },

    initialize: function() { },

    hideView: function (event) { }
});


var ChildView = ParentView.extend({
    events: {
        'click .items a': 'doSomething'
    },

    constructor: function () {
        // Save reference of the super class prototype
        this.super = ParentView.prototype;

        //console.log(this.events);        // uncomment it and it will work fine
        this.events = $.extend({}, this.super.events, this.events);
        console.log(this.events);

        this.super.constructor.apply(this, arguments);
    },

    initialize: function() {
        this.super.initialize.call(this);    
    },

    doSomething: function (event) { }

});

注意:当我在子节目中创建一个局部变量或将其名称更改为其他内容时,例如childEvents,它可以正常工作。令人惊讶的是,如果我在扩展之前进行console.log(this.events)工作正常。

0 个答案:

没有答案