更改“父”属性的属性

我遇到了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 } } } 

如果它位于serviceFunction ,则可以使用this.username访问service.username

我如何做,而我在serviceObject.getUsername

我不是一个Javascript专家,但它似乎有一个对象嵌套到另一个对象。 你真正尝试的是得到父母的一个领域,所以“这个”肯定没有绑定到对象,你可能会想。

看看这个好的解决scheme: Javascript对象:得到父

正如@Enak所说, getUsername里面的this是指getUsername实例。

如果你在console.log(this)里面的getUsername ,你会得到{ getUsername: [Function] }

代替

console.log(this.username);

使用:

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

您无法从父对象中检索子对象的信息。

一种select是在父项中创build一个init函数,以在子项中设置相同的属性:

 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 

它是undefined因为您的serviceObject.getUsername()的调用网站显式绑定到serviceObject ,它没有username属性。

您也可以使用以下语法: serviceObject.getUsername.call(service)getUsernamethis绑定到service

请记住, this绑定的function只能由呼叫站点定义。 无论你调用getUsername()serviceObject.getUsername()serviceObject.getUsername.call(service) ,你基本上绑定到不同的对象。