# Eloquent JavaScript 3rd edition (2018) 第六章~The Secret Life of Objects --- tags: Javascript relate --- ###### tags: `Javascript` > An abstract data type is realized by writing a special kind of program […] which defines the type in terms of the operations which can be performed on it. > > Barbara Liskov, Programming with Abstract Data Types 這章節即將解釋OOP(object-oriented programming)在JS的應用 ## Encapsulation(封裝形式) > 一種將被擷取的函式介面的實作細節部份包裝、隱藏起來的方法。同時,它也是一種防止外界呼叫端,去存取物件內部實作細節的手段,這個手段是由程式語言本身來提供的。封裝被視為是物件導向的四項原則之一。 ## Methods Methods就是property裡面包含了function value以下是個很的例子: 這邊的speak就說明得很好 ```javascript= let rabbit = {}; rabbit.speak = function(line) { console.log(`The rabbit says '${line}'`); }; rabbit.speak("I'm alive."); // → The rabbit says 'I'm alive.' ``` `this` 可以自動地指向object被呼叫的地方 ```javascript= function speak(line) { console.log(`The ${this.type} rabbit says '${line}'`); } let whiteRabbit = {type: "white", speak}; let hungryRabbit = {type: "hungry", speak}; whiteRabbit.speak("Oh my ears and whiskers, " + "how late it's getting!"); // → The white rabbit says 'Oh my ears and whiskers, how // late it's getting!' hungryRabbit.speak("I could use a carrot right now."); // → The hungry rabbit says 'I could use a carrot right now.' ``` `call` 如果你想要"更精確地"指向object被呼叫的地方可以使用 ```javascript= speak.call(hungryRabbit, "Burp!"); // → The hungry rabbit says 'Burp!' ``` ## Prototypes