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

Raf*_*ael 3 javascript dom

在创建大量DOM元素时,document.createElement和朋友可以添加大量的字节和丑陋.我知道我可以创建自己的子程序,或使用innerHTML或其他什么,但为什么我不能这样做:

var $c = document.createElement;
var newP = $c('p');
Run Code Online (Sandbox Code Playgroud)

Firebug抱怨这条消息:

"Illegal operation on WrappedNative prototype object" nsresult: "0x8057000c (NS_ERROR_XPC_BAD_OP_ON_WN_PROTO)"
Run Code Online (Sandbox Code Playgroud)

显然,我做了一些不允许的事情.为什么不呢?它允许其他东西,例如Array.splice或Math.min.

CMS*_*CMS 8

调用它的方式会导致方法this内的值createElement引用全局对象.

我建议你简单地使用一个函数:

var $c = function (tagName) { return document.createElement(tagName); };
var newP = $c('p');
Run Code Online (Sandbox Code Playgroud)

我说的行为可以用一个例子来描述:

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"
Run Code Online (Sandbox Code Playgroud)