varo=(function(){varperson={name:'Vincent',age:24,};return{run:function(k){returnperson[k];},}}());在不改变上面的代码情况下,怎么得到原有的person对象?假如在person中加上__proto__:null,原先大家回答的方法就失效了,但此时仍旧有解,有兴趣者欢迎挑战。
2 回答
白板的微信
TA贡献1883条经验 获得超3个赞
Object.prototype.__defineGetter__('get',function(){returnthis;});console.log(o.run('get'));
胡子哥哥
TA贡献1825条经验 获得超6个赞
基于@小俞的方法,我写个可能是更好的选择的吧!javascriptObject.defineProperty(Object.prototype,'self',{get:function(){returnthis;},set:function(value){returnthis},configurable:true//该属性的存在是确保该属性可被delete方法删除});varperson=o.run('self');deleteObject.prototype.self;//由于不推荐使用prototype来扩展自己定义的属性(扩展标准规定的除外),这里把扩展再去掉。相较小俞的做法,这里面的用到的都是共有方法,不是__xxx__这种更为私有的方法(__xxx__)这种可能在不同浏览器里的实现不一样。
添加回答
举报
0/150
提交
取消