var o = (function() { var person = { name: 'Vincent', age: 24, }; return { run: function(k) { return person[k]; }, }}());在不改变上面的代码情况下, 怎么得到原有的 person 对象?假如在 person 中加上 __proto__: null,原先大家回答的方法就失效了,但此时仍旧有解,有兴趣者欢迎挑战。
2 回答
qq_笑_17
TA贡献1818条经验 获得超7个赞
Object.defineProperty(Object.prototype, 'self', {
get: function () {return this;},
set: function (value) {return this},
configurable: true
// 该属性的存在是确保该属性可被delete方法删除
});
var person = o.run('self');
delete Object.prototype.self;
//由于不推荐使用prototype来扩展自己定义的属性(扩展标准规定的除外),这里把扩展再去掉。
这里面的用到的都是共有方法,不是__xxx__
这种更为私有的方法(__xxx__
)这种可能在不同浏览器里的实现不一样。
吃鸡游戏
TA贡献1829条经验 获得超7个赞
Object.prototype.__defineGetter__('get', function(){
return this;
});
console.log(o.run('get'));
添加回答
举报
0/150
提交
取消