在Javascript中是否相当于.apply不会改变这个值?

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(),他thisobj,因为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在里面funcobj.

这可能是我5年前寻找的功能,但那是5年前,所以谁记得:)