编辑代码

// // 最后留一个面试题
function fn() {
    const obj = {
        a: 1,
        b: 2,
    };
    return function get(x) {
        return obj[x];
    };
}
const getObj = fn();
// 方法一
// // 在不修改上面代码的情况下,如何能够修改 obj+
Object.defineProperty(Object.prototype, 'thisSelf', {
    get: function () {
        console.log(this)
        return this;
    }
})
const obj2 = getObj('thisSelf')
obj2.a = 3
console.log(obj2)


// 方法二
// 尝试将proto设置为getObj的原型
// 这不会影响obj,因为getObj和obj之间没有原型链的关系

// 创建一个新对象作为原型
const proto = {
    set: function (key, value) {
        console.log(this, "-------------this")
        this[key] = value;
    },
    get: function (key) {
        return this[key]
    }
};
Object.setPrototypeOf(getObj, proto);

console.log(getObj.set, "---------------set")

// 尝试调用我们添加的方法
getObj.set('a', 3);
getObj.set('c', 5);

// 检查是否成功修改
console.log(getObj.get('a'));
console.log(getObj.get('c'));