为什么会这样:
var i = document.createElement("input");
document.body.appendChid(i);
但不是这样:
var i = document.createElement("input");
var f = document.body.appendChild;
console.log(f === document.body.appendChild); //outputs true
f(i);
错误的详细信息是:
TypeError: 'appendChild' called on an object that does not implement interface Node.
答案 0 :(得分:2)
在JavaScript中,看起来像"方法"实际上并不知道"它附属于什么对象;实际上,它只是一个碰巧被保存为某个对象的属性的函数。在大多数情况下,根据调用中this
左侧的对象确定对象.
将代表哪个对象发生。
因此,您的变量f
指向正确的函数,但是当它被调用时,它将看到this
的错误值。因为在这种情况下,它希望在DOM节点上调用(在工作测试中document.body
),在该范围之外调用它会引发显示的错误。
请注意,上面的内容都略有简化,只有足够的细节来解释您的示例。您可以通过搜索this
以及call
和apply
的解释来找到进一步的阅读,这些是明确设置函数调用的this
绑定的方法。< / p>