我理解如何定义这样的函数:
function myfunc(x,y,z) {
alert("Just an example " + x + y + z)
}
但不是这样:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script>
(function ($) {
$.fn.idle = function (x, y, z) {
alert("Just an example " + x + y + z)
}(jQuery));
</script>
以上是我正在使用的库的一部分,但我根本无法理解$.fn.idle
位。
它在做什么?它以某种方式定义了一个名为“idle”的函数,但是$.fn
呢?那(function ($) {
部分怎么样?我再次理解$(document).ready(function() {
,但(function ($) {
完全是异类。这是一个简短的手吗?
底部(jQuery));
的重要性是什么?
答案 0 :(得分:8)
immediately invoked function expression在其范围内将jQuery
别名为$
:
(function($) {}(jQuery));
它立即创建并执行一个函数。这样,无论全局$
引用什么,您都可以在函数内部使用$
来引用jQuery。对于使用jQuery.noConflict()
的网页很有用。此IIFE内部声明的变量也不会泄漏到全局范围。
至于问题的其他部分,$.fn === jQuery.prototype
。因此,通过向jQuery原型添加方法,您可以在任何jQuery对象上调用它。 E.g:
$.fn.doSomething = function(){}; //add a method to the jQuery prototype
$('selector').doSomething(); //then you may call it on any jQuery object
答案 1 :(得分:1)
这被称为IIFE - 立即调用函数表达式。
(function ($) {
// inside stuff
}(jQuery));
jQuery
作为$
导入函数体,函数立即运行。
// inside stuff
$.fn.idle = function (x, y, z) {
alert("Just an example " + x + y + z)
} // added in missing parentheses
$.fn
相当于jQuery.fn
,jQuery.fn.idle
只是jQuery.fn
上指向某个函数的属性。
另一个有趣的观点是,jQuery.fn
是jQuery.prototype
的别名,即它们是相同的。
这里的许多别名使代码比实际更复杂。
这是一个常见的结构,您可以看到将插件/ mixins添加到库中。
希望,我能为你做好准备。
答案 2 :(得分:1)
向$.fn
添加函数使它们可用于jQuery对象。
$.fn.alertTitle = function() { alert( $(this).attr('title') ); };
$('#foo').alertTitle();
答案 3 :(得分:1)
这是为变量赋值函数:
var test = function () { alert('testing'); }
test(); // will alert testing
分配给变量的函数也称为“匿名函数”,因为它没有名称,通常用于将函数作为参数传递给另一个函数。
在javascript中,变量可以以$
开头,jQuery使用它。 jQuery是一个对象,它具有属性,其中一个属性称为fn
。此属性还可以包含属性,在本例中为idle
。
所以$.fn.idle = function () {};
归结为:
$ = {
fn: {
idle: function () {}
}
};
这也被称为“命名空间”,尽管它也有其他细微差别。 另请注意,您只能为现有对象指定属性:
var myVar = {};
myVar.test.foo = {}; // results in error because myVar.test is undefined
myVar.test = {
foo: {}
}; // this is correct