javascript - 当 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 进行了基本修改。
我怎样才能使对字典成员的操作只影响特定的对象实例?
解决方案
我会创建一个返回具有所需属性的对象的函数(每次函数创建新对象时重新创建):
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);
推荐阅读
- java - 按块读取和写入文件块
- mongodb - MongoDB使用带有数组的DBref连接到对象
- ios - 如何从子视图内的按钮触发事件以触发父视图上的事件?按钮不工作
- azure-logic-apps - 使用逻辑应用根据大型对象数组中的字段编写新 JSON
- sql - BigQuery - 如何查找 1 个或多个类别中唯一重叠值的计数(分类值计数)?
- sql - 如何根据布尔值将 SQL 行拆分为多行?
- html - 如何防止垂直堆叠的导航下拉菜单覆盖移动设备中的其他导航链接
- flutter - 如何使用 Firestore 和 FirebaseAuth 检查当前用户是否是 Flutter 中的管理员
- c++ - std::shared_ptr 为空但不为空
- vhdl - vhdl 和门返回未知值