gpt4 book ai didi

javascript - JqueryUI自己的小部件: Instances overwrite values (sometimes)

转载 作者:行者123 更新时间:2023-12-02 18:59:57 25 4
gpt4 key购买 nike

我写了一个小测试来描述我的问题:

<div id="test1"></div>
<div id="test2"></div>
<script>
(function ($) {
$.widget("mseh.testIt", {
options : {
foo : false,
bar : false
},

_settedOptions : {
foo : false,
bar : false
},

readOptions : function() {
return this._settedOptions;
},

_init : function() {
this._initializeTest();
},

_initializeTest : function() {
var self = this;
$.each(self.options, function(key, value) {
self._settedOptions[key] = value;
});
}
});
})(jQuery);

$('#test1').testIt({ foo : true, bar : false});
$('#test2').testIt({ foo : true, bar : true});

console.log($('#test1').testIt('readOptions'));
console.log($('#test2').testIt('readOptions'));

</script>

在此示例中,两个日志都为我提供了“foo”的 true(如预期)和“bar”的 true(不符合预期)。

这是一个错误还是我做错了什么?

使用 jQuery 1.7.2 和 1.9.1 进行测试。使用 jQueryUI 1.9.2 和 1.10.0 进行测试。

谢谢

最佳答案

因为 _settedOptions 在 testIt 的每个实例中共享。

如果您检查 test1 和 test2 之间的 _settedOptions 对象相等性,如下所示,它们引用同一个对象。

console.log( $('#test1').testIt('readOptions') === $('#test2').testIt('readOptions') );

如果您想将其视为实例变量,请写在下面。

(function ($) {
$.widget("mseh.testIt", {
options : {
foo : false,
bar : false
},

// This field will be shared in every instance.
// _settedOptions : {
// foo : false,
// bar : false
// },

readOptions : function() {
return this._settedOptions;
},

_init : function() {
// like this!!!!!
this._settedOptions = {
foo : false,
bar : false
};

this._initializeTest();
},

_initializeTest : function() {
var self = this;
$.each(self.options, function(key, value) {
self._settedOptions[key] = value;
});
}
});
})(jQuery);

关于javascript - JqueryUI自己的小部件: Instances overwrite values (sometimes),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14890973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com