Лучший подход, чтобы избежать «этого» ошибок JavaScript в XBL
-
12-10-2019 - |
Вопрос
Говорить о XBL не совсем говорит о JavaScript. Итак, я создам этот вопрос, который связан с Вот этот, но теперь о XBL, где я не создатель кода root javascript, а только методов и обработчиков событий внутри привязки.
--
В некоторых случаях this
Ключевое слово может не относиться к объекту, который я ожидаю. (Последний пример: В ключевом случае, в моем XBL)
Какой лучший подход, чтобы избежать такой ошибки?
Пока я всегда использую getElementById
(или же $.fn
от jQuery), но я не уверен, лучший ли это подход.
--Обновить
Немного больше деталей:
Внутри XBL Метод единственный способ получить доступ к элементу, который был определен в XUL Файл (файл описания графического интерфейса) без использования «этого» (так как это может быть не «это», я ожидаю) с GetElementByID, и это делает код невозможным, поэтому я ищу альтернативы ..
Решение
Как вы слышали в другом месте, проблема в том, что this
Параметр не обязательно тот объект, о котором вы впервые подумали, особенно когда вы говорите о обработчиках событий и тому подобное. Лучший способ, который я нашел, - это написать небольшую функцию, которая будет связывать некоторые объекты как this
переменная и вернуть другую функцию, которая использует привязку, чтобы вызвать исходную функцию.
Взгляните на этот код:
var bindFunction = function(self, f) {
return function() {
return f.apply(self);
};
};
var foo = function() {
alert(this.hello);
};
var bar = {
hello: "Hello there"
};
var boundFoo = bindFunction(bar, foo);
boundFoo();
У меня есть функция, называемая bindFunction
это берет объект (называемый self
) и некоторая функция, и возвращает другую функцию, которая будет вызвать функцию передачи, применяя self
объект как this
переменная.
Остальная часть кода - это лишь какой -то тестовый код: foo
функция, которая будет предупреждать this.hello
, а bar
объект с hello
Участник, и как вы можете связать foo
с bar
.
По сути, я взял функцию, которая не принимает параметров и сгенерировал другую функцию, которая обеспечит первую всегда при правильной this
переменная. Идеально подходит для обработчиков событий.
(Извините, но я ничего не знаю о XBL, поэтому я надеюсь, что это будет полезно.)
Другие советы
Если нет лучшего ответа, хорошим подходом можно использовать файлы JavaScript вместо XBL для реализации. Просматривая исходный код Xulrunner, выглядит так, как это делает большинство кода.
Но я все еще хотел бы использовать XBL, если бы был способ нормально работать.