如何更改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,我的答案对你满意吗?我想是的。这与显示模块模式非常相似。