嗨我在OOP風格的NodeJS中編寫模塊。在JS中處理對象的嵌套屬性
我有多個包含原始數據的簡單對象和包含其他對象的多個複雜對象。
const Simple = function Simple() {
this.x = 0;
this.y = 0;
}
Simple.prototype.getArea = function() {
return this.x * this.y;
}
const Complex = function Complex() {
this.ownProp = 0;
this.nestedProp = new Simple();
this.otherNestedProp = new otherSimple();
}
Complex.prototype.set = function(key, value) {
this[key] = value;
}
Complex.prototype.otherSet = function(value) {
Object.assign(this, value);
}
我的問題是,誰將會使用我的API可以通過這樣做打破東西的用戶:
let simple = new Simple();
simple.getArea(); // 0
let complex = new Complex();
complex.nestedProp.getArea(); // 0
complex.set('nestedProp', {x: 5, y: 6});
complex.nestedProp.getArea(); // THROW <----
let complex = new Complex();
complex.nestedProp.getArea(); // 0
complex.set({nestedProp: {x: 5, y: 6});
complex.nestedProp.getArea(); // THROW <----
是否有lodash功能只分配這樣的嵌套對象的值。
還是有一個很好的方法來管理這類問題?
注:我可以檢查instanceof
但我有很多模塊,我不想管理每個特定的情況。
你用'otherSet'函數試着怎麼樣? –
準備好將項目遷移到使用TypeScript嗎?這將解決您只允許特定類型的對象分配的問題。 –
準確地說,人們將被允許執行'complex.set('nestedProp',{x:5,y:6});''不是嗎?甚至'complex.nestedProp = {x:10,y:90}'這個還是不是? –