2015-07-06 3 views
1

Использование apply() преобразует селектор jQuery в элемент DOM с помощью элемента [0] в селекторном массиве.Как передать селектор jQuery с помощью apply()?

Я создал функцию Invoke для вызова многочисленных функций все используют один и тот же контекст:

function func1(){ 
    // do something with 'this'... 
} 

function func2(){ 
    // something else with 'this'... 
} 

function func3($msg){ 
    try{ 
     alert($msg.text()); 
    }catch(err){ alert(err); } 
} 

function invoke(context, funcs, params){ 
    funcs.forEach(function(func){ func.apply(this, params); }.bind(context)); 
} 

invoke(this, [func1, func2, func3], $('#msg')); 

here's the jsFiddle

Спасибо заранее.

ответ

2

apply метод ожидает массив в качестве второго параметра, так что это:

func.apply(this, [params]); 

должен работать, как ожидалось. Или вы можете просто использовать вместо call():

func.call(this, params); 

function func1(){ 
 
    // do something with 'this'... 
 
} 
 

 
function func2(){ 
 
    // something else with 'this'... 
 
} 
 

 
function func3($msg){ 
 
    try{ 
 
     alert($msg.text()); 
 
    }catch(err){ alert(err); } 
 
} 
 

 
function invoke(context, funcs, params){ 
 
    funcs.forEach(function(func){ func.apply(this, [params]); }.bind(context)); 
 
} 
 

 
invoke(this, [func1, func2, func3], $('#msg')); \t
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="msg">Hello</div>


https://jsfiddle.net/doqm4sf5/4/


ли вы хотите использовать call() вместо этого?

function func1(){ 
 
    // do something with 'this'... 
 
} 
 

 
function func2(){ 
 
    // something else with 'this'... 
 
} 
 

 
function func3($msg){ 
 
    try{ 
 
     alert($msg.text()); 
 
    }catch(err){ alert(err); } 
 
} 
 

 
function invoke(context, funcs, params){ 
 
    funcs.forEach(function(func){ func.call(this, params); }.bind(context)); 
 
} 
 

 
invoke(this, [func1, func2, func3], $('#msg'));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="msg">Hello</div>

+0

Добавлено [PARAMS], и он работает в настоящее время, d'о. Спасибо за ваш ответ, искренне оценили. – Data

+1

Добро пожаловать, я рад, что смогу помочь. – Shomz

Смежные вопросы