javascript函数apply的使用和理解
来源:互联网 发布:ubuntu开机花屏 编辑:程序博客网 时间:2024/05/16 18:37
定义
javascript中有个非常重要的函数:apply(),apply()方法在指定this值和参数(参数以数组或者类数组对象的形式存在)的情况下调用某个函数,意思是它可以改变一个函数的执行环境。
语法
fun.apply(thisArg[, argsArray])
参数
thisArg
在fun函数运行时指定的this值。需要注意的是,指定的this值并不一定是该函数执行时真正的this值,如果这个函数处于非严格模式下,则指定null或undefined时会自动指向全局对象(浏览器中就是window对象),同时值为原始值(数字,字符串,布尔值)的this会指向该原始值的自动包装对象。
argsArray
一个数组或者类数组对象,其中的数组元素作为单独的参数传给fun函数。如果该参数为null或undefined,则表示不传入任何参数。从ECMAScript 5开始可以使用类数组对象。
用法
在调用一个存在的函数时,你可以为其指定一个this对象。this指当前对象,也就是正在调用这个函数的对象。使用apply,你可以只写一次这个方法,然后在另一个对象中继承它,而不用在新对象中重复写该方法。
举个简单的例子。
var obj1 = { objName: 'obj1', fun: function(val) { console.log(this.objName); console.log(val); }};var obj2 = { objName: 'obj2'};obj1.fun.apply(obj2, [10]);
chrome下输出结果:
obj210
优缺点
apply函数可以在调用函数的时候改变this值和参数,这样我们可以在特定的需求面前应用apply函数。从面向对象的角度来看,这是一种重复利用代码较少冗余的手段。鉴于这个优点,很多javascript库中都会应用apply函数。
然而apply函数的缺点也是比较明显的。在上面的例子中就显现出,代码可读性低,逻辑清晰度不够。在代码重用上,其实可以通过prototype(或者其他原理)实现继承达到相同的效果。与继承的方式在逻辑上和可读性上相比,apply函数就有点为了便捷重用而破坏代码的倾向了(类似于goto语句)。那些大量使用apply函数的javascript库,对于javascript初学者来说就非常晦涩难懂了(实际应用中apply调用的函数的功能远比上面的例子复杂)。
- javascript函数apply的使用和理解
- javascript中call和apply函数的使用
- JavaScript call()和apply() 的一些理解
- 关于javascript的apply和call函数
- javascript 函数的方法call()和apply()
- 关于javascript的apply和call函数
- 关于javascript的apply和call函数
- JavaScript中apply和call的使用
- JavaScript中call和apply的使用
- javascript 中的call函数的理解问题;apply
- JavaScript -- apply的使用
- JavaScript 的 call函数 和 apply函数的用法
- 对JavaScript中call和apply的理解
- JavaScript中apply和call用法的理解
- JavaScript中函数的属性和call和apply
- javascript 函数方法apply()和call()的共同点和区别
- javascript的函数-重点介绍callee,call和apply
- JavaScript之函数的apply和call方法。
- ios pickerview选择城市
- Android ListView实现上拉到底部的时候自动刷新数据
- 98%的人没解出的德国面试逻辑题(离散数学篇)!?
- win10 wamp 无法启动 红色
- bzoj3004 吊灯
- javascript函数apply的使用和理解
- 关于python3.2的'dict' object has no attribute 'iteritems'
- Android 深入理解Android中的自定义属性
- bzoj3007 拯救小云公主
- Android定制组件的三种方式(提供代码)
- Linux环境下在Tomcat上部署JavaWeb工程
- leetcode 110. Balanced Binary Tree
- bzoj3122【SDOI2013】随机数生成器
- 个人认为最好的Mac端的视频播放软件___movist