首先,先来一张支付宝的二维码。大家不要介意。。可以选择无视,我就玩玩而已
入正题, apply() 和 call()这两个方法,我们不止是用来做参数传递的,由于他可以传递this,作用域的一些问题也就跟着改变了。比如:
先定义一个function
this.name = "name inwindow";
function methods1() {
console.log("下方打印的是作用于下的name属性")
console.log(this.name);
}
接下来我们就去调用这个方法
methods1();
接着:我们使用apply来调用下这个function
function methods2() {
let mycontext = {
"name": "name in mycontext"
};
methods1.call(mycontext);
}
然后,我们再全部串联起来
<script>
this.name = "name inwindow";
function methods1() {
console.log("下方打印的是作用于下的name属性")
console.log(this.name);
}
function methods2() {
let mycontext = {
"name": "name in mycontext"
};
methods1.call(mycontext);
}
methods2(); //name in mycontext
methods1(); //name inwindow
</script>
其实apply也是这样的,也许你会觉得这个有点鸡肋,但是人家是这样解释的:
使用 call() (或 apply() )来扩充作用域的最大好处,就是对象不需要与方法有任何耦合关系。
-------------------------《javascript高级程序设计》