如何更改JavaScript getter的作用域?
鉴于以下目标:如何更改JavaScript getter的作用域?,javascript,scope,this,getter,Javascript,Scope,This,Getter,鉴于以下目标: var myObj = { fname: 'John', lname: 'Doe', values: { get fullName() { return this.fname + ' ' + this.lname } } }; 尝试访问myObj.values.fullName时,返回undefined-undefined,因为此的上下文设置为myObj.values,而不是myObj 有没
var myObj = {
fname: 'John',
lname: 'Doe',
values: {
get fullName() {
return this.fname + ' ' + this.lname
}
}
};
尝试访问myObj.values.fullName
时,返回undefined-undefined
,因为此的上下文设置为myObj.values
,而不是myObj
有没有办法改变这种状况?我尝试了我能想到的bind
的每一种组合,但大多数时候这只会导致语法错误,因为fullName
不是一个常规函数。。是否需要将getter嵌套在values元素中?以下方法可以很好地工作:
var myObj = {
fname: 'John',
lname: 'Doe',
get fullName() {
return this.fname + ' ' + this.lname
}
};
alert(myObj.fullName)
。是否需要将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
}
}
};
只能通过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()
将“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()
你不能像return myObj.fname+''+myObj.lname
那样使用它吗?你不能像return myObj.fname+'+myObj.lname
那样使用它吗?如果有多个myObj
对象的实例,这会起作用吗?这是一个很好的观点。第二个选项是@evolutionxbox,我的答案对你满意吗?我想是的。这与显示模块模式非常相似。如果有多个myObj
对象实例,这会起作用吗?这是一个很好的观点。第二个选项是@evolutionxbox,我的答案对你满意吗?我想是的。这与显示模块模式非常相似。