Changchun Master Li

一个玩坏的JavaScript面试题

2016-12-10

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var o = (function() {
var person = {
name: 'Vincent',
age: 24
};
return {
run: function(k) {
return person[k];
}
}
})();

// TODO 在不改变上面代码的基础上,并且在只知道 person 是一个对象的基础上
// 只能在本段注释后面继续写代码,最终通过 o 打印出 person ,对于上文中的 person 即 `Object {name: "Vincent", age: 24}`
// 例如 o.someThing = 1; cosnole.log(o.run('someThing'));
// 在考虑到 person 为未知对象的基础上,尽可能写出更加完善的代码。
// 最终,如果不能完成该题,请尽可能的记录下来你思考的过程。

1
2
3
4
5
6
7
8
9
10
11
// 答案:
Object.defineProperty(Object.prototype, 'self', {
get: function () {return this;},
// 向Object.prototype注入一个accessor property
configurable: true
// 该属性的存在是确保该属性可被delete方法删除
});

var person = o.run('self');
delete Object.prototype.self;
// 这里把扩展再去掉。

来源:

cnodejs
segmentfault
知乎

使用支付宝打赏
使用微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏

扫描二维码,分享此文章