为了账号安全,请及时绑定邮箱和手机立即绑定

前端面试题,利用给定接口获得闭包内部对象

前端面试题,利用给定接口获得闭包内部对象

RISEBY 2018-08-02 20:15:49
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__)这种可能在不同浏览器里的实现不一样。

查看完整回答
反对 回复 2018-08-05
?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

Object.prototype.__defineGetter__('get', function(){

    return this;

});



console.log(o.run('get'));


查看完整回答
反对 回复 2018-08-05
  • 2 回答
  • 0 关注
  • 1116 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信