学习周报-2025-06-29
无法直接获取对象的情况下,修改对象属性
在闭包中,无法直接获取对象的属性,但是可以通过修改对象的属性来实现。
已有代码:
js
const o = (function () {
const obj = {
a: 1,
b: 2,
}
return {
get: function (key) {
return obj[key];
},
}
})()
当前通过变量o
的封装,无法直接获取obj
并修改obj
的属性。
但是可以通过在Object.prototype
上添加一个自定义属性,然后这个属性直接返回obj
本身,这样就可以随意修改obj
了:
js
Object.defineProperty(Object.prototype, 'hack', {
get: function () {
return this
}
})
const obj = o.get('hack');
obj.a = 3;
console.log(obj.a); // 3