2016-07-27 133 views
0

我不知道如何訪問pubOuter,任何人都可以找出這一個呢?它始終返回undefined,因爲我找不到外部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();在返回聲明之前。 –

+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是不確定的,因爲你將其分配給outer這是不確定的,因爲你永遠不會運行inner1,你需要這樣做:

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); 
});