12

我正在使用 jQuery UI 小部件工厂。

$.widget("myPlugin" , {

    options: {
    },

    _create: function() {
    },

    instanceVar: "huzzah!"

});

在测试中,看起来 instanceVar 实际上是原型的一部分。所以它在插件的所有实例中都是相同的。

我可以通过将 instanceVar 放入选项来解决此问题,如下所示:

$.widget("myPlugin" , {

    options: {
        instanceVar: "huzzah!"
    },

    _create: function() {
    },

});

然而,这似乎很奇怪,因为 instanceVar 只是插件使用的一个内部变量——插件的用户不应该能够改变它。

是否有另一种(更好的)方法来实现这一目标?

谢谢你的帮助!

4

1 回答 1

17

您可以将私有数据存储在实例本身上,例如,在 内部_create,您应该能够做到this.instanceVar = "huzzah!"

$.widget("ui.myPlugin", {

    options: {
        foo: "foo"
    },

    _create: function() {
        this.instanceVar = "huzzah!"
    },

    _setOption: function() {
        this.instanceVar = "worky!";
    },

    destroy: function() {
        console.log(this.instanceVar);  
    }

});

$(document).myPlugin().myPlugin("option","foo","bar").myPlugin("destroy"); // "worky"

$("body").myPlugin().myPlugin("destroy"); // "huzzah!

演示:http: //jsfiddle.net/PGUqr/

于 2012-12-13T20:26:03.803 回答