如何在不改变下面代码的情况修改对象
var o = (function(){
var obj={
a:1,
b:2,
};
return {
get:function(k){
return obj[k];
}
}
})();
解决办法
//原理是当读取对象属性不存在的时候、会像对象的原型查找
Object.defineProperty(Object.prototype,'abc',{
get(){
return this;
}
})
console.log(o.get('abc'));
修改有问题的面试题代码
解决方法一
不保留原型链
var o = (function(){
// var obj = Object.create(null);
// obj.a=1;
var obj = {
a:1,
b:2,
};
Object.setPrototypeOf(obj,null);
return {
get:function(k){
return obj[k];
}
}
})();
解决漏洞方法二
保留原型链
var o = (function(){
var obj = {
a:1,
b:2,
};
return {
get:function(k){
if(obj.hasOwnProperty(k)){
return obj[k];
}
}
}
})();