回调函数(二)

 有时候回调并不是一次性的匿名函数或全局函数,而是对象的方法。如果该回调方法使用this来引用她所属的对象,这可能会导致意想不到的行为。

 1 win.color = "#ffc000";
 2         // 重构findNodes() 以接受一个回调函数
 3         var findNodes = function(callback, callback_obj){
 4             var eles = doc.body.getElementsByTagName("*");
 5             var i = eles.length,
 6                 nodes = [],
 7                 found;
 8 
 9             // 检查回调函数是否为可调用的
10             if(typeof callback !== "function"){
11                 callback = false;
12             }
13 
14             while(i){
15                 i --;
16                 // 复杂逻辑
17                 
18                 if(eles[i].nodeType == 1){
19                     found = eles[i];
20                 }
21 
22                 // 现在运行回调函数
23                 if(callback){
24                     callback.call(callback_obj, found);
25                 }
26 
27                 nodes.push(found);
28             }
29             return nodes;
30         };
31         
32         var myapp = {};
33         myapp.color = "green";
34         myapp.paint = function(node){
35 
36             node.style.color = this.color;
37             console.log(this); 
38         };
39         // myapp.paint();// "green"
40 
41         findNodes(myapp.paint, myapp);
原文地址:https://www.cnblogs.com/chuyu/p/3457572.html