眼眸繁星
2022-05-22 11:31:08
考慮一個基本示例,我試圖請求對象中不存在的屬性案例一:(一般對象)var obj1 = { name: "Jack", age: 29} console.log(obj1.city); 回答: undefined這意味著如果存在不存在的屬性,則正確地稱為undefined.案例二:(對象構造器)現在,我要做同樣的事情——首先創建一個繼承自的字符串,String Constructor繼承自Object Constructor。__proto__Object-Constructor 沒有名為的屬性,__proto__因此答案應該是未定義的。而是(奇怪地)它返回null。這是無法理解的。As far as I know, if the property of an Object is not found - its value should be `**undefined**` and not `**null**`. 現在,請有人幫助理解 - 在上升之后,prototype chain概念和實現應該保持不變。所以,如果沒有找到 的__proto__屬性,為什么答案不Object Constructor應該是???undefinednull
1 回答

慕勒3428872
TA貢獻1848條經驗 獲得超6個贊
Javascript 的設計方式位于每個對象null的原型鏈的頂部。正如規范所說,對于內部方法,它的類型簽名是,它:GetPrototypeOf( ) → Object | Null
確定為該對象提供繼承屬性的對象??罩当硎緵]有繼承的屬性。
訪問__proto__對象的屬性或使用Object.getPrototypeOf將調用該內部方法。該__proto__屬性確實存在于大多數對象上(因此它不返回undefined),但不保證調用它的對象具有內部原型(如果沒有,則該操作返回null)。
看看__proto__getter/setter 如何Object.prototype:
console.log(Object.getOwnPropertyDescriptor(Object.prototype, '__proto__'));
對于通過 的任何對象,該屬性都將存在Object.prototype,大多數情況下都是如此。吸氣劑可能會返回null。
請注意,如果您創建一個不繼承自的對象,則Object.prototype該__proto__屬性將不在原型鏈中,您將獲得undefined:
const obj = Object.create(null);
console.log(obj.__proto__);
添加回答
舉報
0/150
提交
取消