如何更改 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.fnamemyObj.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()