如果我理解正確,object.hasOwnProperty()
應該在父類的繼承屬性上返回false。但是,下面的代碼在自己的和繼承的屬性上都返回true。Typescript:object.hasOwnProperty()在繼承的屬性上顯示true。爲什麼?
我的理解/代碼不正確或者是hasOwnPropery()
不正確? 如果是我,我如何區分自己的和遺傳的屬性?
編輯:我已將我的用例添加到示例代碼中。
我期望孩子的fromDb()
只會照顧自己的屬性,而不是覆蓋父母的fromDb()
設置的屬性。
class Parent {
parentProp = '';
fromDb(row: {}) {
for (const key of Object.keys(row)) {
if (this.hasOwnProperty(key)) {
if (key === 'parentProp') {
// Do some required data cleansing
this[key] = row[key].toUpperCase()
} else {
this[key] = row[key];
}
}
};
return this;
}
}
class Child extends Parent {
childProp = '';
fromDb(row: {}) {
super.fromDb(row);
for (const key of Object.keys(row)) {
if (this.hasOwnProperty(key)) {
this[key] = row[key];
}
};
return this;
}
}
let row = {
parentProp: 'parent',
childProp: 'child',
}
let childObj = new Child().fromDb(row);
console.log(childObj);
控制檯:
Child:
childProp: "child"
parentProp: "parent"
我編輯了問題以包含我的用例。 – passerby
我已經爲該特定用例添加了一些細節。如果你需要更具選擇性,你將不得不創建一個屬性映射,以便孩子看看地圖,而不是它自己的鍵(即「如果屬性在我的地圖中,我會改變它,否則我不會」 )。 – Fenton
似乎複製發生在兩個方向。當我將'console.log(Object.keys(this))'添加到Parent的'fromDb()'時,它還顯示由'super.fromDb(row)'調用的Child的屬性。我從來沒有意識到語法糖的這種影響。天真的我... – passerby