JavaScript 的apply,call和bind
-
每个函数都包含两个非继承而来的方法:apply(), call().
-
这个两个方法的用途都是在特定的作用域中调用函数实际上等于设置函数体内的this对象的值。
-
apply() 方法接受两个参数
- -个是在其中运行函数的作用域,也就是this
- 另一个是参数数组。这个数组可以是Array的实例,也可以是arguments对象
-
call() 方法与 apply()方法的作用相同,区别仅在于接受参数的方法不同
- call() 方法第一个参数是一样是this,变化的是其余参数都直接传递给函数。在使用call()方法时,传递给函数的参数必须逐个列举出来
-
apply() 和 call() 方法的真正用处是可以拓展函数赖以运行的作用域,而扩充作用域的最大好处,就是对象不需要与方法有任何耦合关系
window.color = 'red'; var o = { color: 'blue' } function saycolor() { console.log(this.color); } saycolor() // red sayColor.call(this) //red, 因为在全局下的this默认是window || global saycolor.call(window) //red saycolor.call(o) //clue
-
-
ES5中还定义了一个方法: bind().
- bind() 方法会创建一个函数的实例,这个函数实例的this值会被绑定到传给 bind() 函数的值
window.color = 'red'; var o = { color: 'blue' } function saycolor() { console.log(this.color); } var objectsaycolor = saycolor.bind(this) objectsaycolor(); //blue
网友评论