2013-10-02 2 views
1

Учитывая это определение ...Как передать функции с аргументами к функции в JavaScript

function initialize(lat, lng) 
{ 
    //do stuff 
} 

Как вызвать аргументы функции инициализации в этом вызове?

google.maps.event.addDomListener(window, 'load', initialize); 

Я хочу сделать что-то вроде этого:

google.maps.event.addDomListener(window, 'load', initialize(58,18)); 

вызов 1 работает даже без каких-либо аргументов, переданных в него, но это что-то подобное для вызова 2 я хочу сделать.

К сожалению, это, вероятно, что-то очень легко, я новичок в JavaScript ... (но я гугле в течение достаточно долгого времени теперь)

Edit:

Grrr, нашел его, клянутся Я уже пробовал, должен был иметь тип или дым!

google.maps.event.addDomListener(window, 'load', function(){initialize(1,2);}); 
+1

Исследование обратных вызовов в JavaScript. – ronnyfm

ответ

0
google.maps.event.addDomListener(window, 'load', function() { 
    push.call(arguments, 58); 
    push.call(arguments, 18); 
    initialize.apply(this, arguments); 
}); 

не совсем, инициализация не имеет сигнатуру DomListener, лучше сделать:

google.maps.event.addDomListener(window, 'load', function() { 
    initialize.call(this, 58, 18); 
}); 

первый раздвигает два аргумента в специальный arguments псевдо-массива (следовательно, необходимость в call), а затем вызывает инициализацию в контексте контекста слушателя applying аргументов текущей функции по аргументам вызываемой функции (инициализация).

Второй вызов инициализируется в контексте слушателя. Если вам не нужен контекст, вы можете просто сделать:

google.maps.event.addDomListener(window, 'load', function() { 
    initialize(58, 18); 
}); 
+0

почему это было downvoted? –

0

Это одна из вещей, которые Function.prototype.bind можно достичь, помните, который this вы хотите тоже, хотя.

google.maps.event.addDomListener(
    window, 
    'load', 
    initialize.bind(null, 58, 18) 
); 

выше будет вызывать initialised с this набор для window и первые два Params 58, 18. В этом примере было бы легче понять

function foo(a, b, c) { 
    console.log(this, a, b, c); 
} 
var foobar = foo.bind(null, 1, 2); 
foobar('bar'); 
// window, 1, 2, "bar" 
Смежные вопросы