理解call及apply
2015-09-01 22:49
239 查看
转载自:http://www.zhihu.com/question/20289071 //call 和 apply 都是为了改变某个函数运行时的 context 即上下文而存在的,换句话说,就是为了改变函数体内部 this 的指向。 var func1 = function(arg1, arg2) {}; /*通过 func1.call(this, arg1, arg2); 或者 func1.apply(this, [arg1, arg2]); 来调用。其中 this 是你想指定的上下文, 他可以是任何一个 JavaScript 对象,call 需要把参数按顺序传递进去,而 apply 则是把参数放在数组里。 当你的参数是明确知道数量时,用 call,而不确定的时候,用 apply,然后把参数 push 进数组传递进去。*/ function cat() { } cat.prototype = { food: "fish", say: function () { alert("I love " + this.food); }} var blackCat = new cat; blackCat.say(); var whiteDog = {food:"bone"} blackCat.say.call(whiteDog) /* 如果我们有一个对象whiteDog = {food:"bone"},我们不想对它重新定义say方法, 那么我们可以通过call或apply用blackCat的say方法:blackCat.say.call(whiteDog);*/ function exam(a, b, c, d, e) { // 先看看函数的自带属性 arguments 什么是样子的 console.log(arguments); // 使用call/apply将arguments转换为数组, 返回结果为数组,arguments自身不会改变 var arg = [].slice.call(arguments); console.log(arg); } exam(2, 8, 9, 10, 3); // result: // { '0': 2, '1': 8, '2': 9, '3': 10, '4': 3 } // [ 2, 8, 9, 10, 3 ] // // 也常常使用该方法将DOM中的nodelist转换为数组 // [].slice.call( document.getElementsByTagName('li') );
相关文章推荐
- 自学Android系列 笔记2 Android_RelativeLayout属性大全
- iOS文件的操作与相关的属性
- 自学Android系列 笔记2 Android 学习之浅谈Android五大布局
- 自学Android系列 笔记2 Android 学习之toast
- 自学Android系列 笔记2 Android 学习之Activity回传值
- 自学Android系列 笔记1 Button 点击事件
- 自学Android系列 笔记1 生命周期介绍
- 自学Android系列 笔记1 单位介绍
- [笔记]Unity5(5.1.2f1)中多边形碰撞器Polygon Collider 2D无法编辑
- 自学Android系列 笔记1 目录结构说明 2
- 自学Android系列 笔记1 目录结构说明
- Android Studio——HelloWorld
- 四种方案解决ScrollView嵌套ListView问题
- iostat
- Android-TextView
- Android 自定义上面圆角下面直角的ImageView
- android目录结构
- 一、tiny4412开发板Android环境搭建之编译安卓源码
- Android键盘弹起情景应用
- Android Looper和Handler