0

これは、類似のプラグイン/メソッドの宣言が使用されている複数のバリエーションの漠然とした例でしかありません。私は

$.fn.myPlugin 

を言って、私はfnはプロトタイプを示して任意の有効なjQueryオブジェクト上で実行することができます公に利用可能なプラグインのメソッドを定義していますことを知っています。私の質問はどちらか、メソッドを定義することで、その後ですので

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

のようなので、

$.fn.myPlugin.methodName 

や私のプラグインの外のように私のメインのプラグインの内側に、これは、パブリック/プライベートメソッドであることも影響しますか?それぞれ異なる宣言型の場合は、どのような違いがありますか。

私が知りたいと思う理由の背景には、状況にいくつかの文脈を与えるために、私が呼び出すことができ、正常に実行できる1つのメインプラグインを定義したいと思っています。しかし、エンドユーザが、私は彼らがそれをすることができる公にすることを許可しました。ユーザーが再定義するのではなく、コールバックを提供できるようにするメソッドがあれば、そのメソッドを非公開にしたいと考えています。

+0

あなたは$ .whatever' 'に何も設定している場合、それは公共のだ... –

+0

はので、私はその後myPluginのプライベートメソッドを宣言するために' $ .fn.myPlugin.privateMethod'をしますか? – 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

関連する問題