未定义的attr()参数

时间:2016-02-11 11:26:36

标签: jquery syntax parameters arguments attr

Here is my fiddle.

这是一个非常基本的问题,我知道,但是看看上面的JSFiddle(直接来自W3C网站),我不明白参数/参数" origValue"参数(如下所示)来自,因为它没有在任何地方定义 - 我通常希望在该参数的空间中使用定义的参数调用该函数。

$("button").click(function(){
    $("#w3s").attr("href", function(i, origValue){
        return origValue + "/jquery"; 
    });
}); 

显然我知道它代表什么,但我不知道代码如何理解这是原始价值。谁能解释一下?

1 个答案:

答案 0 :(得分: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"}
];

snippet.log("Before: " + JSON.stringify(objects));
updateProperty(objects, "color", function(index, origValue) {
  return origValue.toUpperCase();
});
snippet.log("After : " + JSON.stringify(objects));
&#13;
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="//tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
&#13;
&#13;
&#13;

这可以更有效地实现,也可以用更少的代码实现,但其目的是准确显示回调如何获得原始值。

jQuery&#39; attr与上面的updateProperty非常相似。