【问题标题】:Undefined attr() parameter未定义的 attr() 参数
【发布时间】:2016-05-22 03:42:04
【问题描述】:
Here is my fiddle.
这是一个非常基本的问题,我知道,但是查看上面的 JSFiddle(直接取自 W3C 网站),我不明白参数/参数“origValue”参数(如下所示)来自哪里,因为它未在任何地方定义 - 我通常希望在此参数的空间中使用已定义的参数调用该函数。
$("button").click(function(){
$("#w3s").attr("href", function(i, origValue){
return origValue + "/jquery";
});
});
显然我知道它代表什么,但我不知道代码如何理解这是原始值。谁能解释一下?
【问题讨论】:
标签:
jquery
syntax
parameters
arguments
attr
【解决方案1】:
我不知道代码是如何理解这是原始值。
因为attr 的代码调用了传入前一个值的回调。 回调直到attr调用它并告诉它值才知道值。
让我们把 jQuery 和 attr 排除在外,想想一个对象数组和一个允许您使用回调修改每个对象的属性的函数:
function updateProperty(array, propName, callback) {
for (var i = 0; i < array.length; ++i) {
var obj = array[i];
obj[propName] = callback(i, obj[propName]);
// ^^^^^^^^^^^^^ This is how the callback knows
// the original value
}
}
var objects = [
{"color": "green"},
{"color": "blue"},
{"color": "red"}
];
console.log("Before: " + JSON.stringify(objects));
updateProperty(objects, "color", function(index, origValue) {
return origValue.toUpperCase();
});
console.log("After : " + JSON.stringify(objects));
这可以更有效地实现或用更少的代码实现,但其想法是准确显示回调如何获取原始值。
jQuery 的attr 做的事情与上面的updateProperty 非常相似。