簡體   English   中英

陰影屬性如何在 Object 具有相同名稱屬性的面向編程中工作

[英]How shadowing properties works in Object orientated programming with same name property

const myDate = new Date(1995, 11, 17);

console.log(myDate.getYear()); // 95

myDate.getYear = function() {
  console.log('something else!')
};

myDate.getYear(); // 'something else!'

In this uploaded code the expected output is "something else" but I cannot understand how it will create shadowing when we define a object with the same name in Object prototype and how constructor function work on it

Javascript inheritance 通過在原型 ZA2F2ED4F8EBC2CBB16C21A29DC40 的 object 實例上定義新方法來工作。 例如。 如果您要擴展 class Base ,則創建一個新的 function 並將其原型設置為 Base 的實例,然后在該實例上添加您想要額外的任何方法。

一個實例是一個空的 object,帶有一個指向原型的指針。 訪問屬性的邏輯是首先檢查它自己的 object,然后遍歷原型鏈並最終在屬性不存在時返回undefined 例如。 如果您在設置它之前和之后編寫 this.getYear,您將得到兩個不同的結果,因為訪問器將開始在實例上查找屬性,然后結束其搜索。

V8 和現代 JS 引擎進行了優化,不必將 go 放到這個兔子洞里,但它仍然應該像對象的鏈接列表一樣工作。

而且當然。 任何屬性都可以是方法,並且您不能讓方法和屬性具有相同的名稱,因為它們共享命名空間。 例如。 你可以這樣做myDate.getYear = 2022; 這樣myDate.getYear將返回2022 ,但myDate.getYear()將以應用程序錯誤結束,因為該屬性不包含可以應用的 function object。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM