创建大量DOM元素时,document.createElement和朋友可以添加大量字节和丑陋。我知道我可以创建自己的子程序,或使用innerHTML或其他什么,但为什么我不能这样做:
var $c = document.createElement;
var newP = $c('p');
Firebug抱怨这条消息:
"Illegal operation on WrappedNative prototype object" nsresult: "0x8057000c (NS_ERROR_XPC_BAD_OP_ON_WN_PROTO)"
显然我做了一些不允许的事情。为什么不呢?允许其他事情,例如Array.splice或Math.min。
答案 0 :(得分:8)
调用它的方式导致this
方法中的createElement
值引用全局对象。
我建议您只使用一个功能:
var $c = function (tagName) { return document.createElement(tagName); };
var newP = $c('p');
我说的行为可以用一个例子来描述:
var foo = 'global foo';
var obj = {
foo: "I'm obj.foo",
method: function () {
return this.foo;
}
};
var fn = obj.method;
obj.method(); // "I'm obj.foo"
fn(); // "global foo"