2016-04-29 42 views
2

我真的想讓Date.now()可用作屬性,而不是函數調用或方法。換句話說,我希望clock.now.go返回一個unix時間戳。我無法讓它工作。返回的時間戳從原始呼叫停滯。以下是顯示控制檯結果的代碼。是否有可能通過調用屬性觸發新的時間戳,或者是函數調用,即'()'是否需要?JavaScript - 屬性生命週期和構造函數方法觸發

//Revealing Module Pattern (Public & Private) 
var clock = (function() { 

    // object to expose as public via return 
    var pub = {}; 

    //constructor function 
    function Now() { 
     this.getNow = function() { 
      return (Date.now()); 
     }; 
     this.go = this.getNow(); 
    } 

    //private 
    var now = new Now(); 
    //public 
    pub.test1 = now; 
    pub.test1.go; //clock.test1.go returns 1461888755076 
    pub.test1.getNow(); //clock.test1.getNow() returns 1461888767477 (GOOD) 
    pub.test2 = now.getNow(); //clock.test2 returns 1461888755076 (STALE) 
    pub.test3 = now.go; //clock.test3 returns 1461888755076 (STALE) 
    //Return just the public parts 
    return pub; 
}()); 
+1

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/get – zerkms

回答

3

如果你希望它被呈現爲一個屬性,但實際上是一個活的函數調用,那麼您可以使用Javacript getter

//Revealing Module Pattern (Public & Private) 
var clock = (function() { 

    // object to expose as public via return 
    var pub = {}; 

    Object.defineProperty(pub, "now", { 
     get: function() { 
      return Date.now(); 
     } 
    }); 
    return pub; 
}()); 

console.log(clock.now); // returns live time 

或者,它可以被濃縮到這一點:

//Revealing Module Pattern (Public & Private) 
var clock = (function() { 

    // object to expose as public via return 
    var pub = { 
     get now() { 
      return Date.now(); 
     } 
    }; 
    return pub; 
}()); 

console.log(clock.now); // returns live time 

或者,哪怕只是這種(不封閉模塊模式):

var clock = { 
    get now() { 
     return Date.now(); 
    } 
}; 

console.log(clock.now); // returns live time 
+0

增加的例子,返回現場時間將吸氣劑。 – jfriend00

+0

哇。很酷。謝謝。 –

+0

+爲最後一個片段 – Redu

1

你可以這樣做用這樣的吸氣器

var obj = { 
 
      _time : "", 
 
      get time() { 
 
      this._time = new Date(); 
 
      return this._time; 
 
      }, 
 
      set time(val) { 
 
      this._time = val; 
 
      } 
 
}; 
 

 
document.write("<pre>" + obj.time + "</pre>");

+0

雖然在這種情況下,* get *的結果將是* _time *被賦予一個新的Date對象。然而,在* set *之後它可能是任何東西,下一次* get *被訪問它將返回一個新的Date,那麼* set *的意義是什麼? – RobG

+0

只是約定:) – Redu

+0

我想我的觀點(表達不佳)是* get *表現得像一個二傳手。 – RobG

相關問題