0

所以我似乎無法找到一個直接的答案,只有模糊的多個變化的例子,其中使用類似的插件/方法聲明。我知道,說

$.fn.myPlugin 

我定義,可以任何有效的jQuery對象,其中FN表示原型上執行的公開可用的插件方法。我的問題是,然後,通過定義一個方法,我的主要插件任內,像這樣

$.fn.myPlugin.methodName 

或我的插件之外,像這樣

$.something.methodName //where 'something' is in place of 'fn' 

這是否會影響它是一個公私/方法?如果每種都是不同類型的聲明,那麼區別是什麼。

爲什麼我想知道,爲了給出一些情況的背景是,我想定義一個可以調用並正常運行的主插件,但是如果最終用戶想要重新定義某種方法我已經允許公開,然後他們可以做到這一點。如果我有任何方法,我不希望用戶重新定義,而是提供回調,以便他們可以掛鉤,那麼我想讓這種方法是私人的。

+0

如果你設置的'$ .whatever'任何東西,那麼它的公... –

+0

所以我會再做'$ .fn.myPlugin.privateMethod'以聲明爲myplugin的私有方法? – Turk

+0

不可以。您不能在這樣的公共範圍內創建私有方法。看看下面的@NiettheDarkAbsol提供的答案,看看如何去做。 – Archer

回答

2

設置在$.whatever上的任何東西都是公開的,因此可以被其他開發者修改。

如果你想要私有方法,你應該創建一個閉包。

(function() { 
    function init(jqObj) { ... } // do magic here 
    $.fn.myPlugin = function() { init(this); } // avoid exposing core method 
    $.fn.myPlugin.publicMethod = function() { ... } 
    function privateMethod() { ... } 
})(); 
+0

啊好吧,這是有道理的。我確實通過'(function($){}(jQuery))來定義閉包;'我現在看到私有方法只是局部作用域函數。那是我遺漏的一部分,但是,你是否使用'function(init)'作爲主插件的私有函數,以避免任何人編寫插件本身? – Turk