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
	提交
		取消
	