为什么下面的代码会输出1?
function func(){
alert(this)
}
var i = 1;
func.call(i);
发布于 2015-06-02 09:05:13
定义
Function.prototype.call(这,arg1,arg2,.);
因此,当调用func.call
时,传入的第一个参数被绑定到this
变量。因此,在函数func
中,任何this
变量都将替换为第一个参数,即1
。
将进一步播放
您可以将更多的参数扩展到func
,并使用进一步的参数进行调用,并查看发生了什么:
function func(a,b){
alert(this + a*b);
}
func.call(1,2,3);
回想一下定义,第一个参数或func.call
引用func
的this
变量。所以你最终会跑
alert( 1 + 2*3 );
**参考文献:** 对象/函数/调用
**更上一层楼**
function.prototype.call
还有另一个亲密的兄弟姐妹,即function.prototype.apply
。这两个函数的第一个参数引用this
变量。唯一的区别是function.prototype.apply
在数组中接受此类函数的参数。
所以而不是
func.call(1,2,3);
你可以这样称呼它
func.apply(1,[2,3]);
玩得开心点!
发布于 2015-06-02 08:55:53
因为call
的第一个参数是函数this
值,所以语法是
function.call(thisArg[, arg1[, arg2[, ...]]])
正如在MDN上所指出的
这意味着传递给call
的第一个参数将是被调用函数中的this
。
function func(){
alert(this)
}
func.call("test"); // alerts "test"
要传递参数,您需要传递一个this
值,然后剩下的参数将是传递给函数的参数。
function func(arg1, arg2, arg3){
alert(this); // alerts "this_value"
alert(arg2); // alerts "kitty"
}
func.call("this_value", "hello", "kitty", "cat");
apply
的工作方式是相同的,但是使用了一个参数数组
func.apply("this_value", ["hello", "kitty", "cat"]);
https://stackoverflow.com/questions/30602096
复制