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

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

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

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贡献1468条经验 获得超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贡献1448条经验 获得超7个赞

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

    return this;

});



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


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

添加回答

举报

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