2017-12-11 18 views
0

関数を手動で返すことなくself-inv関数のオブジェクト全体を返すにはどうすればよいですか?自己呼び出し関数全体を返す

私は通常、しかし、それは動作しません、動作するはずです以下の溶液で試してみたい:

var publish = (function() { 
    var pub = {}; 

    pub.hello = function() { 
     return "test" 
    }; 

    return pub; 

}()); 

今「パブ」は、サブスクライブで呼び出し可能である必要があります。

var subsribe = (function(pub) { 

    function hello() { 
     return pub.hello(); 
    }; 

}(publish)); 

私はブラウザに両方のファイルをロードした(パブ最初)。

ただし、

デバッガは言う:ReferenceError:pubは定義されていません。

+0

公開する各メソッドを指定せずに意味しますか?それは可能だとは思わない。 – Jamiec

+0

プロパティはパブリック(アクセス可能)とプライベート(アクセス不可)の両方で同時に使用することはできません。 – destoryer

答えて

1

私はあなたがこのようにそれらを書きたいと思う:

var publish = (function() { 
 
    var pub = {}; 
 

 
    pub.hello = function() { 
 
    return "test" 
 
    }; 
 

 
    return pub; 
 

 
})(); 
 

 

 
var subsribe = (function(pub) { 
 

 
    function hello() { 
 
    return pub.hello(); 
 
    }; 
 

 
    console.log(hello()); 
 
})(publish);

しかし、グローバルな再利用可能な関数のコレクションを他の方法で保つことができます。もっとエレガントかもしれません:)(エクスポートによる別のファイル、これらのメソッドでシングルトンで飾られています)

1

できません。

JSには、現在のスコープ内の変数のリストを取得するメカニズムはありません。

パブリック変数とプライベート変数を区別する方法がないため、可能であれば、おそらく良い考えではありません。

0

はありません、このようなメカニズムがありますが、このような何か行うことができます。

var publish = (function() { 
 
    const me = this; 
 
    let publicMethods = ['hello', 'bye']; 
 

 
    // private 
 
    function _hello() { 
 
    return "test"; 
 
    }; 
 

 
    function _bye() { 
 
    return "end test"; 
 
    }; 
 

 
    publicMethods.forEach((methodName) => { 
 
    let privateMethod = eval('_' + methodName); 
 

 
    Object.defineProperty(me, methodName, { 
 
     get: function() { 
 
     return privateMethod; 
 
     } 
 
    }); 
 
    }); 
 
    return this; 
 

 
}()); 
 

 
console.log(publish.hello); 
 
console.log(publish.bye); 
 
console.log(publish.hello()); 
 
console.log(publish.bye());

+0

私は上記のコードを変更しました:私はローカル変数としてパブを使用し、すべてのメソッドをバインドして返しますが、動作しません。 – nimo23

+0

@ nimo23私のサンプルが動作してから間違ったことをしました:) – bluehipy

+0

私はあなたのバージョンを取っていませんでした。私はコード全体を変更し、すべての関数を保持し、それを返す変数 "pub"を使用するので、他の人には公開されている必要があります。しかし、動作しませんでした.. – nimo23

関連する問題