2016-06-13 142 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),您基本上都会绑定到不同的对象。