2015-11-05 36 views
0

快速的問題。比方說,我有這樣的對象:Javascript單例,如何更新這個變量?

var door = (function(){ 
    var state = "closed"; 

    function doSomething(){ 
     //do something here 
     state = "open"; 
    } 

    return { 
     activate: function() { 
      doSomething(); 
     }, 
     doorState: state 
    } 
})(); 

現在,如果我做的:door.activate()door.doorState是「關閉」。我可以做這樣的事情:

doorState: function(){state} 

,但是這將需要我做door.doorState()

我希望能夠更新對象的狀態,而不是調用函數。

怎麼樣?

回答

1

的問題是你是剛剛更新本地變量,但它不會更新doorState屬性的值

您可以更新返回的對象

var door = (function() { 
 

 
    function doSomething() { 
 
    //do something here 
 
    obj.doorState = "open"; 
 
    } 
 

 
    var obj = { 
 
    activate: function() { 
 
     doSomething(); 
 
    }, 
 
    doorState: "closed" 
 
    } 
 
    return obj; 
 
})(); 
 

 
snippet.log('before: ' + door.doorState); 
 
door.activate(); 
 
snippet.log('after: ' + door.doorState);
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 --> 
 
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

的財產

使用getter語法 - supported in IE9+

var door = (function() { 
 
    var door = 'closed'; 
 

 
    function doSomething() { 
 
    //do something here 
 
    door = "open"; 
 
    } 
 

 
    return { 
 
    activate: function() { 
 
     doSomething(); 
 
    }, 
 
    get doorState() { 
 
     return door; 
 
    } 
 
    } 
 
})(); 
 

 
snippet.log('before: ' + door.doorState); 
 
door.activate(); 
 
snippet.log('after: ' + door.doorState);
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 --> 
 
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

+0

謝謝!我現在知道了。 – bymannan