2016-06-13 144 views
1

我遇到了NPM模塊的對象屬性問題。更改「父」屬性的屬性

我有這樣的代碼:

var service = { //In my code this lane is: module.exports = { because is for a npm module so the client will call it using require(); 
    username: 'test', 

    serviceFunction: function(){ 
     console.log(this.username); //Prints service.username 
    }, 

    serviceObject: {       
     getUsername: function() { 
      console.log(this.username); //THIS IS CAUSING THE FAIL, ITS UNDEFINED 
     }     
    }      
}  

我可以用this.username如果它位於一個serviceFunction訪問service.username

我該怎麼做,而我在serviceObject.getUsername

回答

1

我不是一個JavaScript專家,但它好像你有一個對象嵌套到另一個對象。你真正嘗試的是獲得父項的一個字段,所以「this」可能並不是綁定在對象上的,你可能會想。

看看這個良好的解決方案:Javascript objects: get parent

1

正如@Enak說裏面getUsernamethisgetUsername實例。

如果console.log(this)裏面getUsername,你會得到{ getUsername: [Function] }

而不是

console.log(this.username);

用途:

serviceObject: {       
     getUsername: function() { 
      console.log(service.username); //'test' 
     }     
    } 
0

你不能在一個從檢索子對象的信息父對象。

一種選擇是在父創建一個初始化函數來設置的孩子相同的屬性: -

var service = { 
 
    username: 'test', 
 

 
    serviceFunction: function() { 
 
    console.log(this.username); 
 
    }, 
 

 
    serviceObject: { 
 
    getUsername: function() { 
 
     console.log(this.username); 
 
    } 
 
    }, 
 
    init: function() { 
 
    this.serviceObject.username = this.username; 
 
    } 
 
} 
 

 
service.init() 
 
service.serviceObject.getUsername(); // test

0

這是undefined因爲你serviceObject.getUsername()的調用點是明確綁定到serviceObject,它不具有username屬性。

您也可以使用以下語法:serviceObject.getUsername.call(service)綁定getUsernamethisservice

請記住,函數this綁定僅由調用站點定義。無論您撥打getUsername(),serviceObject.getUsername(),serviceObject.getUsername.call(service),您基本上都會綁定到不同的對象。