本机警报上的函数引用因调用对象无效而失败

Function reference on native alert fails with invalid calling object

考虑以下代码:

function test()
{
   return {
      alert : function(txt){ alert(txt);}
   }
}
test().alert("Boo");

这将完美执行并提醒 Boo

以下将失败:

function test()
{
   return {
      alert : window.alert
   }
}
test().alert("Boo");

错误invalid calling object

为什么最后一个例子引用window.alert时失败了?

window.alert 期望 window 绑定到 this,当你这样称呼它时不满足。 (即 test().alertthis 设置为从 test() 返回的对象。)

你可以这样修复:

return {
  alert : window.alert.bind(window)
}

console.log,例如,行为相同。