Jus*_*siR 44 javascript arguments function apply
看起来很简单,我想用一组参数调用一个函数.当然,我可以说,func.apply(this, ['some', 'arguments']);但这将改变this内部的价值func.知道怎么做而不改变它吗?
s4y*_*s4y 29
你不能,因为this在JavaScript 中的工作方式.继续阅读:
通过ECMAScript规范的"输入执行上下文"部分:当你调用一个函数时,它的值this取决于它的左边(称为激活对象).让我们创建一个名为steve的函数,并将他放在一个对象中:
function steve(){}
var obj = { method: steve };
Run Code Online (Sandbox Code Playgroud)
......当我们称史蒂夫为时obj.method(),他this是obj,因为obj是激活对象.
棘手的情况是当函数调用的左边没有任何内容时:
steve(); // Who am I ?!
Run Code Online (Sandbox Code Playgroud)
有没有给函数调用的左边-有效的,它是null -这样的值this设置为全局对象的默认值(window在Web浏览器,global在Node.js的,等等).
事实上,this你每次调用它时都会设置一个函数.
PS呼叫steve.apply(null, [])相当于呼叫steve().
Jus*_*siR 11
请注意,在ES6中您还可以编写:
func(...someArray)
Run Code Online (Sandbox Code Playgroud)
这里this变成了Window里面func,没用.但如果你写:
obj.func(...someArray)
Run Code Online (Sandbox Code Playgroud)
this在里面func会obj.
这可能是我5年前寻找的功能,但那是5年前,所以谁记得:)