Javascript的每个Function对象中有一个apply方法:
此外,还有另一个很极之相似方法:
他们的共同之处是,都“可以用来代替另一个对象调用一个方法,将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。”——摘自JScript5.5 .chm 她们的不同之处是,apply最多只能有两个参数——新this对象和一个数组,如果给该方法传递多个参数,则把参数都写进这个数组里面,当然,即使只有一个参数,也要写进数组里面。而call则是直接的参数列表,对比如下: function cat(_a, _b, _c, _d){
alert(_a+ _b+ _c+ _d);
}
cat.apply(null,['mao~','hungry','said']);
cat.call(null,'mao~','full','happy');
Javascript就是个非常灵活的编程语言,上面两个函数为此功不可没;也因为她的灵活,所以她可以全部写进一个文件中。(Java就通常一个类class一个文件,一个接口interface也一个文件。在05年初,我还对javascript一窍不通,正要写下第一个“类”时,居然不知怎么下手,因为无法把“类”写到几个文件中 ) 有了这个方法,那我们就可以写一些“没有参数”的函数和轻松调用她们了: var tdCel=function(){
return "<td>"+Array.prototype.slice.apply(arguments).join("</td><td>")+"</td>";
};
var trRow=function(){
return "<tr>"+Array.prototype.slice.apply(arguments).join("</tr><tr>")+"</tr>";
};
var thead=function(){
var row=trRow("<th>"+Array.prototype.slice.apply(arguments).join("</th><th>")+"</th>");
return "<thead>"+row+"</thead>";
};
var tbody=function(c){
return "<tbody>"+c+"</tbody>";
};
var table=function(c){
return "<table>"+c+"</table>";
};
关于Array.prototype.slice.apply(arguments),请看Array.prototype.slice.call自解。或者有朋友会认为上面几行建立table的方法不太妥当,用createElement方法更适合,但这里只是一个例子,或者说是展示了另一种建立table的手段。
Javascript是个很灵活的编程语言,编写起来非常有趣味;她基于对象,除了要救有高级的编程思想外,还要考虑代码数量对页面加载的影响,所以在适当的时候,又要解放思想,实事求是;农村包围城市;科学是第一生产力;时间就是金钱,效率就是生命。 |
JavaScript中apply和call的使用
最新推荐文章于 2024-11-16 14:11:26 发布
Javascript中使用apply方法轻松调用多参数函数
2009-09-18 上午 11:25