3

可能重复:
为什么我不能直接引用 document.createElement?

我对 Js 很陌生,并且一直在玩它。由于document.getElementById&doucment.createElement很长,我决定把它放在一个变量中;例如var d = document.createElement;

  1. 但是,当我将其称为var someElement = d("p");“TypeError:非法调用”时,我不确定这意味着什么。

  2. 如果我分离document对象,var d = document;然后给它一个像这样的属性:d.e = d.createElement;然后用它来创建一个someElement = d.e("p")它可以工作的元素。

有人可以解释是什么原因导致 1. 失败以及为什么 2. 有效吗?先感谢您。

4

2 回答 2

0

在 JavaScript 中使用此表示法时:

objectName.methodName(arguments)

该方法被告知(通过特殊值this)您正在调用它的对象。因此,当您将一个方法从一个对象复制到另一个对象时,它实际上变成了新对象的一个​​方法。

如果你把一个方法当作一个普通的函数,把它复制到一个局部变量中,然后正常调用它:

localVariableNameHoldingMethod(arguments)

那么它this就是全局对象(window)。

于 2012-11-03T14:30:22.623 回答
0

您需要将它们包装在一个函数中,以便您可以从document对象中调用它们。

var d = function(name) {
    return document.createElement(name);
};

这只是createElement方法实现的要求。它需要知道document它应该从什么创建元素。

当您从对象分离方法时,该方法没有原始对象的内存。

这就是为什么它有效:

d.e("p");

由于e是对该createElement方法的引用,并且它是从 调用的d,这是对 的引用,因此document您实际上是在执行以下操作:

document.createElement("p");
于 2012-11-03T14:29:53.227 回答