Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Проблема присвоения document.createElement переменной (https://javascript.ru/forum/events/32671-problema-prisvoeniya-document-createelement-peremennojj.html)

Почемучкин 25.10.2012 10:29

Проблема присвоения document.createElement переменной
 
При попытке присвоить 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

Цитата:

Сообщение от melky
var createEl = document.createElement.bind(document);

Ещё бы работал такой способ везде, было бы совсем замечательно:(

devote 26.10.2012 09:42

Цитата:

Сообщение от Skipp
Ещё бы работал такой способ везде, было бы совсем замечательно

ну дык включив голову, не сложно сделать так что бы работал. тыц

Skipp 26.10.2012 09:51

Цитата:

Сообщение от devote
ну дык включив голову, не сложно сделать так что бы работал. тыц

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

melky 26.10.2012 12:32

Цитата:

Сообщение от Skipp
а то что изначально это не везде есть.

вы ни разу не пользовались замыканиями? ни разу не использовали частичный вызов?


Часовой пояс GMT +3, время: 22:10.