簡體   English   中英

從另一個方法調用時,Javascript單例私有函數不訪問對象屬性

[英]Javascript singleton private function is not accessing object properties when called from another method

我有一個簡單的單例對象,當一個方法調用另一個返回對象屬性的方法時遇到問題。

var Customer = (function () {

var instance;

function init() {


    this.firstName = "";
    this.lastName = "";

    function _myGetFirstName() {
        return this.firstName;
    }

    function _myGetLastName() {
        return this.lastName;
    }

    function _myGetFullName() {
        return _myGetFirstName() + ' ' + _myGetLastName();
    }

    function _mySetFirstName(p) {
        this.firstName = p;
    }

    function _mySetLastName(p) {
        this.lastName = p;
    }

    return {

        setFirstName: _mySetFirstName,
        setLastName: _mySetLastName,
        getFirstName: _myGetFirstName,
        getLastName: _myGetLastName,
        getFullName: _myGetFullName,
    };

};

return {

    getInstance: function () {

        if (!instance) {
            instance = init();
        }

        return instance;
    }

};

})();

我正在使用這樣的對象:

var cust = Customer.getInstance();
cust.setFirstName('FOO');
cust.setLastName('BAR');

console.log(cust.getFirstName());  // displays FOO - OK
console.log(cust.getLastName());   // displays BAR - OK
console.log(cust.getFullName());   // displays nothing

這是我在網絡上多次看到的一種模式,但是我無法使其正常工作。 “ _myGetFullName”方法在做什么? 當我獲得個人的名字和姓氏時,它可以正常工作。 謝謝

您返回的instance是一個新的Object其中包含一些已知的方法。 本地方法不在instance范圍內。 您應該調用實例方法,因此:

function _myGetFullName() {
        return this.getFirstName() + ' ' + this.getLastName();
}

或在當前instance的上下文中調用該函數

  function _myGetFullName() {
      return _myGetFirstName.call(instance) + ' ' + 
             _myGetLastName.call(instance);
  }

或者,當然

function _myGetFullName() {
        return this.firstName + ' ' + this.lastName;
}

無論如何,您的代碼有點奇怪。 您只能派生一個Customer實例。 沒有你的意思是這樣的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM