功能jQuery.fn.init
是在您撥打jQuery(".some-selector")
或$(".some-selector")
時執行的功能。您可以在該段從jquery.js看到這一點:
jQuery = window.jQuery = window.$ = function(selector, context) {
// The jQuery object is actually just the init constructor 'enhanced'
return new jQuery.fn.init(selector, context);
}
所以,其實,你提到的線是jQuery的允許添加的功能,jQuery的對象關鍵,內外jQuery的本身和插件。這是行:
jQuery.fn.init.prototype = jQuery.fn;
通過如該函數的原型分配jQuery.fn
(和由於第一代碼段使用「新」治療jQuery.fn.init作爲構造)時,這意味着通過jQuery.fn.whatever
加入的功能性立即可用於所有jQuery調用返回的對象。
因此,例如,可能會創建一個簡單的jQuery插件,並使用這樣的:
jQuery.fn.foo = function() { alert("foo!"); };
jQuery(".some-selector").foo();
當你聲明的第一行你實際上做的是加入什麼「jQuery.fn.foo」函數用於使用jQuery函數創建的所有jQuery對象的原型,如第二行的jQuery對象。這使您可以簡單地調用jQuery函數結果中的'foo()'並調用您的插件函數。
簡而言之,如果在jQuery中不存在此行,則如果實現細節發生更改,編寫jQuery插件將會更加冗長,並且會受到將來的破壞。
我不確定在init.prototype中加入f1()是什麼意思?它不會添加任何東西,它分配原型。 – 2009-11-18 10:36:34
當然。當然,我的意思是「分配」。對不起我的英語不好。問題是關於爲什麼不簡單地將所有函數分配給init.prototype?爲什麼將它們分配給jQuery.prototype而不是jQuery.prototype分配給jQuery.prototype.init.prototype – NilColor 2009-11-19 09:54:05
有關jQuery設計模式的相關問題:http://stackoverflow.com/q/12143590/1048572 – Bergi 2013-02-11 19:15:43