看起来很简单,我想调用一个带有参数数组的函数。当然,我可以说 func.apply(this, ['some', 'arguments']);
但这会改变 func< 中
。知道如何在不改变它的情况下做到这一点吗?this
的值
最佳答案
你不能,因为 this
在 JavaScript 中的工作方式。继续阅读:
按照 "Entering An Execution Context" 进行ECMAScript 规范的一部分:当您调用函数时,this
的值由它剩下的内容(称为激活对象)决定。让我们创建一个名为 steve 的函数,并将他放入一个对象中:
function steve(){}
var obj = { method: steve };
...当我们调用 steve 为 obj.method()
时,他的 this
是 obj
,因为 obj
是激活对象。
棘手的情况是当nothing 位于函数调用的左侧时:
steve(); // Who am I ?!
函数调用的左侧没有——实际上,它是null
——所以this
的值被设置为默认值全局对象(Web 浏览器中的 window
,Node.js 中的 global
等)。
因此,实际上,您在每次调用函数时都设置了函数的 this
。
附言调用 steve.apply(null, [])
等同于调用 steve()
。
关于javascript - 在 Javascript 中是否有等同于 .apply 的东西不会改变 this 的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5247060/