Я думал, что это будет то, что я мог бы легко гуглить, но, возможно, я не задаю правильный вопрос ...
Как мне установить, что "это" ссылается в данной функции JavaScript?
например, как с большинством функций jQuery, таких как:
$(selector).each(function() {
//$(this) gives me access to whatever selector we're on
});
Как мне написать / вызвать мои собственные автономные функции, которые имеют соответствующую ссылку «this» при вызове? Я использую jQuery, поэтому, если есть способ, специфичный для jQuery, это было бы идеально.
javascript
jquery
scope
this
user126715
источник
источник
$.proxy
Ответы:
Javascripts
.call()
и.apply()
методы позволяют вам установить контекст для функции.Теперь вы можете позвонить:
Что бы предупредить
FOO
. Наоборот, прохождениеobj_b
предупредитBAR!!
. Разница между.call()
и.apply()
заключается в том, что.call()
список разделяется запятыми, если вы передаете аргументы своей функции и.apply()
нужен массив.Следовательно, вы можете легко написать функцию
hook
, используяapply()
метод. Например, мы хотим добавить функцию в.css()
метод jQuerys . Мы можем сохранить исходную ссылку на функцию, переписать функцию с помощью специального кода и вызвать сохраненную функцию.Поскольку магический
arguments
объект является массивом, похожим на объект, мы можем просто передать егоapply()
. Таким образом, мы гарантируем, что все параметры передаются исходной функции.источник
obj_a
, например, по ссылке , вы можете создать ее копиюvar boud_myfunc = myfunc.bind(obj_a)
и просто вызывать поbound_myfunc()
мере необходимости.Используйте
function.call
:Где
that
находится объект, который вы хотитеthis
в функции.источник
function
является зарезервированным ключевым словом; рассмотрите возможность обновления вашего ответа для включения именованной функции, посколькуfunction.call(...)
это недопустимый JavaScript.JQuery использует
.call(...)
метод для назначения текущего узлаthis
внутри функции, которую вы передаете в качестве параметра.РЕДАКТИРОВАТЬ:
Не бойтесь заглядывать в код jQuery, когда у вас есть сомнения, все это в ясном и хорошо документированном Javascript.
то есть: ответ на этот вопрос находится вокруг строки 574,
callback.call( object[ name ], name, object[ name ] ) === false
источник
Вы можете использовать функцию связывания, чтобы установить контекст
this
внутри функции.источник
Еще один базовый пример:
Не работает:
Работает:
Итак, в основном: просто добавьте .bind (this) к вашей функции
источник