Javascript疑问一:重载
【1】《Javascript DOM 高级程序设计》
【2】《Secrets of the Javascript Ninja》
针对重载的问题,这两本书中的解释是不一样的:
【1】中认为javascript不支持重载,认为重载实际上更像是替换。所以如果有两个函数:
1 function myFunction(a,b) { alert(a+b); } 2 function myFunction(a) { alert(a); }
书中认为脚本在执行的时候不会顾及函数定义时的参数,而是直接使用在作用域链中最后定义的那个函数。
【2】中介绍了javascript重载的方法:
1 var ninjas = { 2 values: ["Dean Edwards", "Sam Stephenson", "Alex Russell"] 3 }; 4 addMethod(ninjas, "find", function(){ 5 return this.values; 6 }); 7 addMethod(ninjas, "find", function(name){ 8 var ret = []; 9 for (var i = 0; i < this.values.length; i++) 10 if (this.values[i].indexOf(name) == 0) 11 ret.push(this.values[i]); 12 return ret; 13 }); 14 addMethod(ninjas, "find", function(first, last){ 15 var ret = []; 16 for (var i = 0; i < this.values.length; i++) 17 if (this.values[i] == (first + " " + last)) 18 ret.push(this.values[i]); 19 return ret; 20 }); 21 assert(ninjas.find().length == 3, "Found all ninjas"); 22 assert(ninjas.find("Sam").length == 1, "Found ninja by first name"); 23 assert(ninjas.find("Dean", "Edwards").length == 1, "Found ninja by first and last name"); 24 assert(ninjas.find("Alex", "Russell", "Jr") == null, "Found nothing");
先把代码放在这里,搞清楚了继续写。