jQuery类是跨类实例静态共享对象的

时间:2009-05-04 13:14:17

标签: jquery oop

前一段时间我需要使用jQuery创建一个面向对象的类。我转而使用John Resig's精细类解决方案。

遇到问题。当我定义一个全局选项对象时,在我看来后者是在类之间共享的。我已经确认通过仅在一个类中修改对象后打印各种console.log。代码如下所示:

var MyClass = Class.extend({
    defaults : {
        distance : 10,
        speed : 20
    },
    options : null,

    init : function(options) {
        this.options = $.extend(this.defaults, options);
    },

    ...
});

我需要一个全局哈希或数组,以便我可以轻松地将可选设置传递给类。这样做的任何方式?如果没什么作用,我可能不得不求助于手工制作者。

我不太清楚为什么在使用'new'关键字实例化的不同类对象之间静态共享选项对象。

2 个答案:

答案 0 :(得分:1)

我可能在这里错了,但尝试从“var MyClass”中取出“var”。这样做会在窗口命名空间中创建“MyClass”,这实质上使它成为全局的。


更新

这是你需要的吗?

var myObject = function() {
    var defaults = {
                      speed: 20,
                      distance: 10
    };
    var options = null;
    return {
        init: function() { ... },
        setSpeed: function(speed) { this.defaults['speed'] = speed; },
        // etc
    }

}

然后将其称为:

myObject.init(); 

myObject.setSpeed(100);

也许我没有正确理解这个问题,我应该只是stfu

p.s - 以上代码直接来自内存而未经过测试

答案 1 :(得分:0)

他们确实在共享选项值,但那是因为你分配了修改过的 this.defaults 而不是一个独特的对象。来自jQuery.extend() docs

  

请记住目标对象   将被修改,并将被退回   来自extend()。

您可以通过使用默认值扩展空对象然后选项来修复它:

    this.options = $.extend({}, this.defaults, options);
相关问题