我正试图围绕Javascript的function.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如何解决所有问题以使其发挥作用?
答案 0 :(得分:2)
.apply()
不是JQuery功能,它是核心JavaScript语言功能。你可能在JQuery源代码中找不到任何有用的东西,因为他们没有在这里发明轮子。
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/apply
答案 1 :(得分:2)
这不是那种魔力,你似乎完全理解上面的例子。
当你做的时候
jqObj[func].apply(jqObj,args);
它与做
基本相同$(jqObj).func(args);