2016-07-27 9 views
0

私はpubOuterにアクセスする方法を理解できません。 外部からinner2()の機能を見つけることができないので、は未定義を返し続けます。それとも明らかに何かが欠けている。どうもありがとう。オブジェクトから変数にアクセスするにはどうしたらいいですか?

Javascriptを

var myObject = (function(){ 
    var outer; 

    function inner1(IN_number){ 
    outer = IN_number*2; 
    } 

    function inner2(){ 
    inner1(10); 
    return outer; 
    } 


    return { 
    pubFnInner1: inner1, 
    pubFnInner2: inner2, 
    pubOuter: outer 
    }; 

})(); 

$("#click").on("click", function(){ 
    console.log("outer" + myObject.pubOuter); 
}); 

HTML

<button id="click">Click</button> 
+5

さらに詳しい情報が必要です。私が 'inner1'への関数呼び出しなしで見ると、' outer'は定義されません。明確にするには、 'return {...} 'の前に呼び出す必要があります。その後、' outer'が範囲外になり、もはや編集できなくなります。 –

+1

それ以外の場合はinner2()を呼び出します。 return文の前に。 –

+0

これは過度の時間を過ごすと起こることです!私は関数への呼び出しを逃した:)ありがとうスペンサー! –

答えて

1

putOuterプロパティに正常にアクセスしています。問題は、使用する前に何も設定されていないことです。

outerから1に初期化するコードを変更しました。それ以外の場合、inner1関数でIN_numberを掛けると、NaNになります。

var myObject = (function(){ 
    var outer = 1; 

    function inner1(IN_number){ 
    outer = IN_number*2; 
    } 

    function inner2(){ 
    inner1(10); 
    return outer; 
    } 


    return { 
    pubFnInner1: inner1, 
    pubFnInner2: inner2, 
    pubOuter: outer 
    }; 

})(); 

$("#click").on("click", function(){ 

    console.log("outer" + myObject.pubOuter); 
    myObject.pubFnInner1(10); 
    console.log("outer" + myObject.pubOuter); 

    // or combine both steps by using your pubFnInner2 method. 
    console.log("outer" + myObject.pubFnInner2()); 
}); 
0

pubOuterはあなたがinner1を実行したことがないので、未定義であるouterに割り当てているので、これを実行する必要が定義されていません。

var myObject = (function(){ 
    var outer; 

    function inner1(IN_number){ 
    outer = IN_number*2; 
    } 

    function inner2(){ 
    inner1(10); 
    return outer; 
    } 


    return { 
    pubFnInner1: inner1(), 
    pubFnInner2: inner2(), 
    pubOuter: outer 
    }; 

})(); 

$("#click").on("click", function(){ 
    console.log("outer" + myObject.pubOuter); 
}); 
関連する問題