如何在不改变下面代码的情况修改对象

  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];
        }
      }
    }
  })();
Last modification:November 9, 2023
如果觉得我的文章对你有用,请随意赞赏