我正在使用 jQuery UI 小部件工厂。
$.widget("myPlugin" , {
options: {
},
_create: function() {
},
instanceVar: "huzzah!"
});
在测试中,看起来 instanceVar 实际上是原型(prototype)的一部分。所以它在插件的所有实例中都是一样的。
我可以通过将 instanceVar 放入选项来解决这个问题,如下所示:
$.widget("myPlugin" , {
options: {
instanceVar: "huzzah!"
},
_create: function() {
},
});
然而这似乎很奇怪,因为 instanceVar 只是插件使用的内部变量——不是插件用户应该能够改变的。
有没有另一种(更好的)方法来实现这一目标?
谢谢你的帮助!
最佳答案
您可以将私有(private)数据存储在实例本身上,例如,在 _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/