JavaScript中apply和call的使用
来源:互联网 发布:软件项目工时统计表 编辑:程序博客网 时间:2024/06/09 19:59
Javascript的每个Function对象中有一个apply方法:
function.apply([thisObj[,argArray]])
此外,还有另一个很极之相似方法:
function.call([thisObj[,arg1[, arg2[, [,.argN]]]]])
他们的共同之处是,都“可以用来代替另一个对象调用一个方法,将一个函数的对象上下文从初始的上下文改变为由 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的手段。
//简单又随意建立单元格:
var _td=tdCel("English book");
var _td2=tdCel("English book","¥23.8","Xinhua bookshop");
//建立更多的单元格
var _tdArr=Ajax.parseXML(XMLNodes).toArray();
//_tdnArr=["English book","¥23.8","Xinhua bookshop","Tianhelu","at a sale","Mr.White",....]
var _tdN=tdCel.apply(null,_tdnArr);//this is the point!
...
另外,适合使用这个方法的还有下面两个函数: Math.max([number1[, number2[. . . [,numberN]]]]);
Math.min([number1[, number2[. . . [,numberN]]]]);
Javascript是个很灵活的编程语言,编写起来非常有趣味;她基于对象,除了要救有高级的编程思想外,还要考虑代码数量对页面加载的影响,所以在适当的时候,又要解放思想,实事求是;农村包围城市;科学是第一生产力;时间就是金钱,效率就是生命。
- JavaScript中apply和call的使用
- JavaScript中call和apply的使用
- javascript中this,apply和call方法的使用
- javascript中call和apply函数的使用
- JavaScript 中apply()、call()和bind()方法的使用
- JavaScript中call()和apply()方法的使用
- javascript 中apply 和call的区别
- Javascript 中 apply() 和 call() 的区别
- javascript中call()和apply()的区别
- javascript中apply()和call()的区别
- javascript 中 call() 和 apply() 的区别
- JavaScript中call和apply的区别
- javascript中call和apply的区别
- Javascript中call和apply的区别
- javascript 中 apply 和 call
- JavaScript中call和apply
- JavaScript中call和apply
- javascript中call()和apply()
- MessageQueue
- 判断是不是PE文件
- 关于放大缩小的处理
- Thread-specific data
- SQL里的EXISTS与in、not exists与not in 效率比较和使用
- JavaScript中apply和call的使用
- Scrum敏捷项目管理
- 便利的开发工具 CppUnit 快速使用指南
- javascript中四种函数调用模式及对this的不同绑定
- ubuntu server telnet 服务(转)
- Notification的特殊应用
- 【转帖】PIVOT 用法浅尝
- RTMP中的Ping消息
- java.lang.classNotFound Exception:com.mysql.jdbc.Driver