2016-09-24 7 views
3

thisキーワードはオブジェクトの機能内で動作しますが、thisのない他の関数を参照していません。これらの関数をオブジェクトの前に置くと、両方の方法が機能します。どうしてこんなことに?オブジェクトと戻りオブジェクトの相違点

var Obj = { 
    func1: function() { 
    console.log(this.func2()); // works 
    console.log(func2()); // doesn't work 
    }, 
    func2: function() { 
    return 5; 
    } 
}; 
Obj.func1(); 

しかし、生命維持に同じことをやって:

var Obj = (function() { 
    function func1() { 
    console.log(this.func2()); // works 
    console.log(func2()); // works 
    } 
    function func2() { 
    return 5; 
    } 
    return { 
    func1: func1, 
    func2: func2 
    }; 
})(); 
Obj.func1(); 

答えて

5

これは、生命維持には何の関係もありません、最初の例では、2番目の正規関数で、オブジェクトリテラルを持っています。機能のことが可能と命名しながら、

(この値はオブジェクトリテラルの内部のように、オブジェクトである場合やthis)もちろん、オブジェクトリテラルは、オブジェクトの名前を必要とするが、それにアクセスするには、プロパティが続きます名前を使用するだけで、そのスコープ内のどこにでもアクセスできます。

var obj = { 
    prop : function() {...} 
} 

prop(); // fail ... undefined 
obj.prop(); // works 

// then _______________________________________________________________ 

function prop() {...} 

prop(); // works fine 

これは、あなたがやっていることは本当にある、あなただけの別のオブジェクトでそれを包み、すぐに呼び出される関数式なので、多少同じに見えますが、そうではありませんしました。

-1

違いはありません。

どちらの場合も、objectで作業しています。したがって、オブジェクトの下に定義された関数を呼び出すには、thisまたはオブジェクトnameを使用する必要があります。

+0

これは正しくありません。受け入れられた答えを見る – RLaaa

関連する問題