如何更改 JavaScript getter 的范围?
How to change scope of JavaScript getter?
给定以下对象:
var myObj = {
fname: 'John',
lname: 'Doe',
values: {
get fullName() {
return this.fname + ' ' + this.lname
}
}
};
当尝试访问 myObj.values.fullName
时,返回 undefined undefined
,因为 this
的上下文设置为 myObj.values
,而不是 myObj
。
有办法改变吗?我尝试了我能想到的 bind
的所有组合,但大多数时候这只会导致语法错误,因为 fullName
不是常规函数。
You cannot access parent objects in Javascript。您是否需要将 getter 嵌套在 values 元素中?以下将正常工作:
var myObj = {
fname: 'John',
lname: 'Doe',
get fullName() {
return this.fname + ' ' + this.lname
}
};
alert(myObj.fullName)
您只能通过 myObj.fname
和 myObj.lname
访问父对象属性。
var myObj = {
fname: 'John',
lname: 'Doe',
values: {
get fullName() {
return myObj.fname + ' ' + myObj.lname
}
}
};
将"this"替换为对象的名称
选项 1:
var myObj = {
fname: 'John',
lname: 'Doe',
values: {
get fullName() {
return myObj.fname + ' ' + myObj.lname
}
}
};
另一种选择:
选项 2:
var myObj = {
fname: 'John',
lname: 'Doe',
values: {
get fullName() {
return this.parent.fname + ' ' + this.parent.lname
}
},
init: function(){
this.values.parent = this;
delete this.init;
return this;
}
}.init()
给定以下对象:
var myObj = {
fname: 'John',
lname: 'Doe',
values: {
get fullName() {
return this.fname + ' ' + this.lname
}
}
};
当尝试访问 myObj.values.fullName
时,返回 undefined undefined
,因为 this
的上下文设置为 myObj.values
,而不是 myObj
。
有办法改变吗?我尝试了我能想到的 bind
的所有组合,但大多数时候这只会导致语法错误,因为 fullName
不是常规函数。
You cannot access parent objects in Javascript。您是否需要将 getter 嵌套在 values 元素中?以下将正常工作:
var myObj = {
fname: 'John',
lname: 'Doe',
get fullName() {
return this.fname + ' ' + this.lname
}
};
alert(myObj.fullName)
您只能通过 myObj.fname
和 myObj.lname
访问父对象属性。
var myObj = {
fname: 'John',
lname: 'Doe',
values: {
get fullName() {
return myObj.fname + ' ' + myObj.lname
}
}
};
将"this"替换为对象的名称
选项 1:
var myObj = {
fname: 'John',
lname: 'Doe',
values: {
get fullName() {
return myObj.fname + ' ' + myObj.lname
}
}
};
另一种选择:
选项 2:
var myObj = {
fname: 'John',
lname: 'Doe',
values: {
get fullName() {
return this.parent.fname + ' ' + this.parent.lname
}
},
init: function(){
this.values.parent = this;
delete this.init;
return this;
}
}.init()