首页 > 解决方案 > 当 myObj 包含字典时 Object.create(myObj)

问题描述

我正在创建一个对象以用作其他对象的原型。该对象包含原语以及一系列字典。我的问题是,当通过对象的方法之一编辑字典属性时,它会编辑对象原型中的字典,而不是特定对象实例中的字典。

例如:

const protoObj= {
  myPrim: false,
  myDict: {},
  changePrim: function(val) {
    this.myPrim = val;
  },
  addToDict: function(val) {
    this.myDict[val] = val;
  }
};

const myObj2 = Object.create(protoObj);
myObj2.changePrim(true);
myObj2.addToDict("test");
const myObj3 = Object.create(protoObj);

在这一点上myObj2.myPrim是真的,myObj3.myPrim也是假的。但是 addToDict 方法将“test”条目添加到原型对象的 myDict 中,所以现在 myDict 已针对 myObj2 和 myObj3 进行了基本修改。

在此处输入图像描述

我怎样才能使对字典成员的操作只影响特定的对象实例?

标签: javascript

解决方案


我会创建一个返回具有所需属性的对象的函数(每次函数创建新对象时重新创建):

const makeObj = () => {
  const protoObj = {
    myPrim: false,
    myDict: {},
    changePrim: function(val) {
      this.myPrim = val;
    },
    addToDict: function(val) {
      this.myDict[val] = val;
    }
  };
  return Object.create(protoObj);
}

const myObj2 = makeObj();
myObj2.changePrim(true);
myObj2.addToDict("test");
const myObj3 = makeObj();
console.log(myObj3.myDict);


推荐阅读