Почему я не могу иметь прямую ссылку на document.createElement? - PullRequest
3 голосов
/ 12 октября 2010

При создании большого количества элементов DOM document.createElement и друзья могут добавить много байтов и уродства.Я знаю, что мог бы создать свою собственную подпрограмму, или использовать innerHTML, или что-то еще, но почему я не могу просто сделать это:

var $c = document.createElement;
var newP = $c('p');

Firebug жалуется на это сообщение:Я сделал то, что не разрешено.Почему не так?Это разрешено для других вещей, например, Array.splice или Math.min.

1 Ответ

8 голосов
/ 12 октября 2010

То, как вы вызываете его, приводит к тому, что значение 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...