Я пытаюсь обернуть голову вокруг функции Javascript.apply ().Вы используете его так: f.apply(obj,args)
для запуска функции f
с заданными аргументами args
, с внутренним использованием функции this
, сопоставленным с объектом obj
.
Вот простой пример, показывающий, как все это работает для ускорения работы:
var o = {
state : 0,
plus : function(){
this.state += 1;
}
}
//o is an object with a state-tracking var and a function that will operate on it
o.state
// 0
o.plus()
o.state
// 1
newO = {state:3}
// newO is similar to the original object, but doesn't have that state-manipulating function
newO.state
// 3
o.plus.apply(newO,[]) // call o's function, but hijack the 'this' reference to point to newO
newO.state
// 4
Круто.Итак, я написал функцию для решения проблемы нулевого указателя в javascript с помощью определенного плагина jquery.Если набор jQuery пуст, он просто не запускает функцию:
var applyIfPresent = function(jqObj,func,args){
//only works if jquery has the func you supply
if(jqObj.length){
jqObj[func].apply(jqObj,args);
}
}
Я выполнил простой тест: applyIfPresent($("input"),"css",["background","blue"]);
Чтобы узнать, будет ли он обобщаться в набор jQuery из нескольких элементов,Кажется, он работает нормально, но я понятия не имею, как внутренности jQuery и использование this
переводят на эту схему.Мне нравится, что это похоже на магию, но, если честно? Я научился немного бояться магии.
Как f.apply или jQuery все это понимают, чтобы заставить его работать?