javascript - 在 Javascript 中是否有等同于 .apply 的东西不会改变 this 的值?

标签 javascript function arguments apply

看起来很简单,我想调用一个带有参数数组的函数。当然,我可以说 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() 时,他的 thisobj,因为 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/

相关文章:

delphi - WMDeviceChange函数调用其他函数/过程时的Delphi Pascal问题

javascript - 使用 Javascript 将两个数字相加并在文本框中显示结果

C#方法参数API设计

javascript - Firebase 的用户数据结构

javascript - 如何向 Moment.js 语言环境添加新的格式选项?

javascript - React-router:函数不是有效的 React 子项

c++ - int [] 和 int* 作为函数参数的区别

c++ - 宏可以接受列表初始化作为参数吗?

javascript - 我无法在 cordova-sqlite-storage 中为 ionic 1 打开数据库

javascript - 带有 html 的 Angular 弹出窗口