可能重复:
Why can’t I have a direct reference to document.createElement?
我对Js很新,一直在玩它。
自document.getElementById
& doucment.createElement
很长,我决定把它放在一个变量中;
例如var d = document.createElement;
然而,当我把它称为var someElement = d("p");
时,我得到" TypeError:非法调用"而且我不确定这意味着什么。
如果我将document
对象var d = document;
分开,然后给它一个这样的属性:d.e = d.createElement;
然后使用它创建一个元素someElement = d.e("p")
它可以工作
有人可以解释导致失败的原因以及导致失败的原因吗? 提前谢谢。
答案 0 :(得分:0)
您需要将它们包装在一个函数中,以便可以从document
对象中调用它们。
var d = function(name) {
return document.createElement(name);
};
这只是createElement
方法实现的要求。它需要知道它应该从document
创建元素。
从对象分离方法时,该方法没有原始对象的内存。
这就是为什么这样做的原因:
d.e("p");
由于e
是对createElement
方法的引用,并且是从d
调用的,它是document
的引用,因此您实际上在做同样如下:
document.createElement("p");
答案 1 :(得分:0)
在JavaScript中使用此表示法时:
objectName.methodName(arguments)
该方法被通知(通过特殊值this
)您正在调用它的对象。因此,当您将方法从一个对象复制到另一个对象时,它实际上将成为新对象的方法。
如果将方法视为普通函数并将其复制到局部变量,然后正常调用它:
localVariableNameHoldingMethod(arguments)
然后它的this
将成为全局对象(window
)。