Как добавить параметр в ссылку на функцию - PullRequest
0 голосов
/ 26 ноября 2011

Я создаю плагин для jQuery, и у одного из методов есть объект с параметрами:

opts.events => Массив событий в формате:

name => e.g."click","mouseover"... function => ref to function

Приведенный ниже код добавляет слушателя

myParam = "Test"
for event in opts.events
    google.maps.event.addDomListener btnElement, event.name, event.function

Проблема

При вызове функции event.function следует отправить myParamв качестве справки наряду с параметрами функции

я подумал о чем-то вроде:

myParam = "Test"
for event in opts.events
    google.maps.event.addDomListener btnElement, event.name, event.function.call(myParam)

Ответы [ 2 ]

0 голосов
/ 26 ноября 2011

Во-первых, вы неправильно используете .call - первый аргумент - это контекст.Например, если вы пытаетесь передать текущий контекст функции, вы должны написать event.function.call(this, myParen).

Что касается вашей основной проблемы, то вам нужно обернуть функцию в другую функцию:

google.maps.event.addDomListener btnElement, event.name, => event.function.call this, myParam

Если контекст не имеет значения в event.function, вы можете сократить его до

google.maps.event.addDomListener btnElement, event.name, -> event.function(myParam)
0 голосов
/ 26 ноября 2011

Что касается отправки myParam в качестве ссылки на строку, то об этом уже позаботился Javascript. Плохая новость заключается в том, что строки в Javascript являются неизменяемыми, что означает, что вы не можете изменить их, предполагая, что именно поэтому вы хотели передать его в качестве ссылки.

Что касается вашей проблемы с кодированием, вот решение:

myParam = "Test"
for event in opts.events
    google.maps.event.addDomListener btnElement, event.name, ->
        event.function myParam

-> создает переданную анонимную функцию, которая уже знает о вашей переменной myParam через ее закрытие. Эта функция вызывает функцию event.function, передавая myParam как вам нужно. call / apply - это что-то еще и, вероятно, для этой цели не нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...