Вход

Просмотр полной версии : Проблема присвоения document.createElement переменной


Почемучкин
25.10.2012, 10:29
При попытке присвоить document.createElement какой-то переменной для сокращения кода, вернее при попытке эту переменную использовать, возникает исключение:

[Exception... "Could not convert JavaScript argument" nsresult: "0x80570009 (NS_ERROR_XPC_BAD_CONVERT_JS)"

....

:: <TOP_LEVEL> :: line 1" data: no]



try{

var crElem = document.createElement;

alert( crElem );

var d = crElem('div');

}catch(err){
alert(err);
}



Почему, и как обойти?

p.s. пробовал в firefox

Skipp
25.10.2012, 11:05
var crElem = document.createElement;
var d = crElem.call(document, 'div');
alert(d);
Обойти можно так:
var cElem = function(elem){return document.createElement(elem)}

Почемучкин
25.10.2012, 12:03
Да, что-то у меня затмение. Но все-таки - почему не дает использовать мою сокращенную форму?

Skipp
25.10.2012, 12:10
Почемучкин,
Потому, что внутри функции createElement объект this == document, а не window.

Почемучкин
25.10.2012, 21:53
Skipp,
Не понял

melky
25.10.2012, 22:26
ещё один элегантный способ:

var createEl = document.createElement.bind(document);

Skipp
26.10.2012, 09:24
var createEl = document.createElement.bind(document);
Ещё бы работал такой способ везде, было бы совсем замечательно:(

devote
26.10.2012, 09:42
Ещё бы работал такой способ везде, было бы совсем замечательно
ну дык включив голову, не сложно сделать так что бы работал. тыц (http://habrahabr.ru/post/149581/)

Skipp
26.10.2012, 09:51
ну дык включив голову, не сложно сделать так что бы работал. тыц
Это я не спорю, но костыли они и в африке костыли:( Я имел ввиду не то, что невозможно допилить, а то что изначально это не везде есть.

melky
26.10.2012, 12:32
а то что изначально это не везде есть.
вы ни разу не пользовались замыканиями? ни разу не использовали частичный вызов?

Skipp
26.10.2012, 12:44
вы ни разу не пользовались замыканиями? ни разу не использовали частичный вызов?
Ещё как:) Проехали, это больше были просто мысли в слух...