如果 Object.create 生成物件的新深層副本,從新創建的物件中洗掉屬性后會發生什么?
預期輸出:未定義
實際輸出:迦爾納
代碼
var obj1 = {name:"Karna",loc:"Bengaluru"};
var obj2 = Object.create(obj1);
delete obj2.name;
console.log(obj2.name);
你能幫我理解為什么 obj2.name 仍然指的是 obj1 的屬性嗎?
uj5u.com熱心網友回復:
Object.create創建一個新物件,引數物件作為創建的新物件的原型(參考__proto__新創建物件的 )。它不添加obj1to的屬性obj2。因此,如果您呼叫deleteon obj2,它將洗掉 obj2 的屬性,而不是原型中的屬性。
例子:
var obj1 = { name: 'John' }
var obj2 = Object.create(obj1);
console.log(obj2.__proto__ === obj1) // returns true
console.log(obj2.hasOwnProperty('name')) // returns false;
console.log(obj2.name) // returns John
delete obj2.name; // returns true
console.log(obj2.name) // returns John, since delete will not traverse the prototype chain to delete keys
更多資訊:https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create
uj5u.com熱心網友回復:
有兩點你應該注意: 1- Object.create 不會復制原始物件,它創建一個新物件,引數物件作為創建的新物件的原型。(原型屬性不是可配置的屬性) 2- 洗掉運算子僅適用于configurable物件的屬性。
因此,delete操作員不能洗掉原型屬性,因為它們不可配置。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/378834.html
標籤:javascript
