猿问

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

var o = (function() {

    var person = {

        name: 'Vincent',

        age: 24,

    };

    return {

        run: function(k) {

            return person[k];

        },

    }

}());

在不改变上面的代码情况下, 怎么得到原有的 person 对象?


假如在 person 中加上 __proto__: null,原先大家回答的方法就失效了,但此时仍旧有解,有兴趣者欢迎挑战。


RISEBY
浏览 1123回答 2
2回答

qq_笑_17

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__)这种可能在不同浏览器里的实现不一样。

吃鸡游戏

Object.prototype.__defineGetter__('get', function(){    return this;});console.log(o.run('get'));
随时随地看视频慕课网APP
我要回答