Javascript调用方法

Javascript call method

为什么下面的代码会输出1?

function func(){
  alert(this)
}
var i = 1;
func.call(i);

因为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"]);

定义

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 指的是 functhis 变量。所以你最终会 运行

alert( 1 + 2*3 );

** 参考:** https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call

** 进一步阅读 **

function.prototype.call 有另一个近亲 function.prototype.apply。两个函数的第一个参数都引用 this 变量。唯一的区别是 function.prototype.apply 在数组中接受此类函数的参数。

所以

func.call(1,2,3);

你会用

来称呼它
func.apply(1,[2,3]);

玩的开心!