【问题标题】:JavaScript: unexpected typeof resultJavaScript:意外的 typeof 结果
【发布时间】:2013-02-20 03:51:47
【问题描述】:

我有一个数组迭代器函数:

function applyCall(arr, fn) {
  fn.call(arr[0], 0, arr[0]);
}

还有一些代码

var arr1 = ['blah'];
applyCall(arr1, function (i, val) {
  alert(typeof this); // object    WHY??
  alert(typeof val); // string
  alert(typeof(this === val)) // alerts false, expecting true
});

为什么typeof this 在内联函数object 中,而不是string

jsfiddle here

【问题讨论】:

  • 只是一个注释。我相信最后一条语句应该是typeof this === typeof val 而不是typeof(this === val)
  • 因为this 不再指代arr1。一旦你在函数中使用this,它就会引用function,它是一个对象。
  • @icanc - 这不是真的。 .call() 的第一个参数决定了函数内部的 this 是什么。

标签: javascript this typeof


【解决方案1】:

当在 JavaScript 中调用方法时,它在内部将 this 设置为调用对象:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/apply

...原始值将被装箱。

通过“装箱”,它们意味着原语被包装在一个对象中。请注意,这只适用于apply/call 的第一个参数。其他参数成为未“装箱”的函数参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多