为什么我不能直接引用document.createElement?

时间:2010-10-11 21:43:28

标签: javascript dom

创建大量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。

1 个答案:

答案 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"