引用对象与对象不一样?

时间:2015-07-31 23:00:46

标签: javascript html

为什么会这样:

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.

1 个答案:

答案 0 :(得分:2)

在JavaScript中,看起来像"方法"实际上并不知道"它附属于什么对象;实际上,它只是一个碰巧被保存为某个对象的属性的函数。在大多数情况下,根据调用中this左侧的对象确定对象.将代表哪个对象发生。

因此,您的变量f指向正确的函数,但是当它被调用时,它将看到this的错误值。因为在这种情况下,它希望在DOM节点上调用(在工作测试中document.body),在该范围之外调用它会引发显示的错误。

请注意,上面的内容都略有简化,只有足够的细节来解释您的示例。您可以通过搜索this以及callapply的解释来找到进一步的阅读,这些是明确设置函数调用的this绑定的方法。< / p>