MapTool = function () {
var keys = {
markers: 'markers'
}
return {
StoreValues: function(array) {
$(self).data("markers", array)
}
LogArray1: function() {
console.log($(self).data(keys));
console.log($(self).data(keys.markers));
//Result: logged value is 'markers' (default keys.markers value)
}
LogArray2: function() {
console.log($(self).data(keys.markers));
//Result: logged value is an array of markers
}
}
我不明白为什么LogArray1
默认dataKeys值当你第一次调用$(self).data(keys)
。有人能给我解释一下为什么会这样吗?
data
方法有不同的签名。文档包括:
.data( obj )
obj
类型:Object
要更新的数据的键值对的对象。
所以$(self).data(keys)
用"default"更新数据markers
键的值。在这个特殊的情况下,它的效果与$(self).data("markers", "markers")
相同。
下面是传递对象给data()
的演示:
var self = document.body;
// First using the key, value signature:
$(self).data("country", "Canada");
// Then using the object parameter:
$(self).data({
name: "Helen",
city: "Toronto"
});
console.log($(self).data("name")); // Helen
console.log($(self).data("city")); // Toronto
console.log($(self).data("country")); // Canada
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
在这个代码片段中,我们看到object形参并没有完全替换(重置)原始数据——只是替换object实参中提供的键。文档说:
在jQuery 1.4.3之前,
.data( obj )
完全替换了所有的数据。从jQuery 1.4.3开始,数据由浅合并扩展。