更改“父”属性的属性
我遇到了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)
将getUsername
的this
绑定到service
。
请记住, this
绑定的function只能由呼叫站点定义。 无论你调用getUsername()
, serviceObject.getUsername()
, serviceObject.getUsername.call(service)
,你基本上绑定到不同的对象。