0

モジュールパターンの有無にかかわらず、次のコードがあります。実行のすぐ隣に結果を示しました。モジュール パターンでは foo と set_inner を変更できますが、関数オブジェクト (非モジュール) では foo と set_inner を変更できません。

module pattern:
var someObj = (function () {
     var instance = {},         
     inner = 'some value';      
     instance.foo = 'blah';      
     instance.get_inner = function () {         
         return inner;     };      
     instance.set_inner = function (s) {        
         inner = s;     };     
     return instance; })(); 

someObj.get_inner();//some value
someObj.set_inner("kkkk");
someObj.get_inner();//kkk
someObj.foo;//blah
someObj.foo="ddd";
someObj.foo;//ddd

non-module:
var someObj = function () {     
    var instance = {},         
    inner = 'some value';      
    instance.foo = 'blah';      
    instance.get_inner = function () {        
        return inner;     };      
    instance.set_inner = function (s) {         
        inner = s;     };      
    return instance; }; 

someObj().get_inner();//some value 
someObj().foo;//blah 
someObj.foo="aaa"; 
someObj().foo;//blah 
someObj().set_inner("kkk"); 
someObj().get_inner();//some value 

どんな助けでも大歓迎です。ありがとう!

4

1 に答える 1

2

あなたの「モジュール」の例は、によって参照される単一のオブジェクトを作成しますinstance。無名関数はすぐに呼び出され、そのオブジェクトを返します。をsomeObj参照しinstanceます。

「非モジュール」の例では、呼び出すたびに新しいオブジェクトが作成されます。無名関数はすぐには呼び出されません。代わりに、使用するたびに呼び出す必要があります。

繰り返し呼び出す代わりに、戻り値を変数に割り当てて参照した場合と同じように動作しますsomeObj

var obj = someObj();
obj.get_inner(); //some value
obj.foo; //blah
obj.foo="aaa";
obj.foo; //aaa
//etc...
于 2013-06-20T07:55:01.847 に答える