更改父母的财产'属性

时间:2016-06-13 10:32:15

标签: javascript node.js npm

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

如果service.username位于this.username,我可以serviceFunction访问serviceObject.getUsername

我在{{1}}时怎么办?

4 个答案:

答案 0 :(得分:1)

我不是Javascript专家,但似乎你有一个嵌套在另一个对象中的对象。你真正尝试的是得到父母的一个字段,所以你可能会认为“这个”肯定没有绑定到对象上。

看看这个有用的解决方案:Javascript objects: get parent

答案 1 :(得分:1)

正如@Enak所说,float x = 100.5; float result = x - (int)x; if (result != 0) { //If the value of `result` is not equal to zero, then, you have a decimal portion which is not equal to 0. //If you want integer result Integer yourAnswer1 = (Integer)result; Float yourAnswer2 = (float)result; } 内的this是指getUsername个实例。

如果getUsernameconsole.log(this),您将获得getUsername

而不是

{ getUsername: [Function] }

使用:

console.log(this.username);

答案 2 :(得分:0)

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

一个选项是在父级中创建一个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

答案 3 :(得分:0)

这是undefined,因为serviceObject.getUsername()的呼叫网站明确绑定到serviceObject,而username没有serviceObject.getUsername.call(service)属性。

您还可以使用以下语法:getUsernamethis的{​​{1}}绑定到service

请记住,函数this绑定仅由调用站点定义。无论您拨打getUsername()serviceObject.getUsername()serviceObject.getUsername.call(service),您基本上都会绑定不同的对象。