使用John Resigs简单的javascript继承修改类属性

时间:2011-10-12 16:14:37

标签: javascript

目前我正在尝试使用John Resigs Simple Javascript Inheritence库,这很有效,但是当我尝试修改默认成员变量时,它似乎影响原型而不仅仅是实例:

http://jsfiddle.net/u2MWL/1/

如您所见,每次创建新实例时,事件的长度都不同。我是以错误的方式使用图书馆还是这是一个众所周知的缺陷?有哪些替代方案?

1 个答案:

答案 0 :(得分:2)

这里的问题是您使用events: []

扩展了课程

数组(和{}对象)变量是引用。因此,通过使用数组扩展类,类的每个实例都将具有等于相同引用数组的events

要解决这个问题,你可以做到

var Test = Class.extend({
    events: null,

    init: function() {
        this.events = [];
        this.events.push(1);
        alert(this.events.length);
    },

    say: function(words) {

    }
});

这样,每次初始化一个类时,都会为events指定一个新数组(因此引用)。我知道,不优雅,但它应该有用。