函数对象的apply()和call()方法
每个函数都包含两个非继承而来的方法:apply()和call()。这两个方法的用途都是在特定的作用域中调用函数,特定的作用域为this参数指定的对象。
apply()和call()真正强大的地方是能够扩充函数赖以运行的作用域。下面来看一个例子:
window.color = "red"; var o = {color: "blue"}; function sayColor() { alert(this.color); } sayColor(); // red sayColor.call(this); // red sayColor.call(window); // red sayColor.call(o); // blue
sayColor()作为全局函数定义,而且当在全局作用域中调用它时,它确实会显示“red”——因为对this.color的求值会转换成window.color的求值。而sayColor.call(this)和sayColor.call(window),则是两种显式地在全局作用域中调用函数的方式,结果当然都会显示“red”。
但是,但运行sayColor.call(o)时,函数的执行环境就不一样了,因为此时函数体内的this对象指向了o,于是结果显示的是“blue”。
使用call()或apply()来扩充作用域的最大好处,就是对象不需要与方法有任何耦合关系。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。