【高级-好题】修改闭包对象
题目描述
const object = (function () {
const obj = {
a: 1,
b: 2,
};
return {
get: function (key) {
return obj[key];
},
};
})();
object.get('a'); // 1
// 在这里实现代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
如何在不改变上面代码的情况下,修改obj
对象,比如给obj
添加一个属性c: 3
?
实现误区
试图通过valueOf
方法获取到obj
对象自身,但是valueOf
要通过obj.valueOf
才能调用,先取出valueOf
函数无法绑定this
。
object.get('valueOf')();
1
解题思路
Object.defineProperty(Object.prototype, 'abc', {
get() {
return this;
}
})
const obj = object.get('abc');
obj.c = 3;
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
如何不让外部修改闭包对象?
const object = (function () {
const obj = {
a: 1,
b: 2,
};
return {
get: function (key) {
if (obj.hasOwnProperty(key)) {
return obj[key]
}
return undefined
},
};
})();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15