调用对象重置/默认对象值?


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开始,数据由浅合并扩展。

最新更新