# 1.4.Object

* 在JS中, 物件具有指向委託原型(delegate prototype)的內部參考
* 所有的數據都是對象（javascript中除了字元串字面量、數字字面量、true、false、null、undefined之外，其他值都是對象）
* 要得到一個對象,不是通過實例化類,而是找到一個對象作為原型並複製它
* 當物件要求方法及特性時, JS引擎會先檢查該物件, 如果請求之鍵不在物件身上, 他就會去檢查委托原型, 此原型練通常會結束於object.
* 1.Object.create(): ES5後被建立
  * 傳入一個參數,Object.create將會建立此參數的副本
  * (1) 如果改變實例上的特性(的值)或陣列特性,該變更將於原型上被共用&#x20;
  * (2) 如果替換實例上的整個特性,該變更只會被反映在該實例上
  *   example:

      ```
      var switchPotato = {
        state: false;
        isOn: function isOn{
          return this.state;
        },
        toggle: function toggle(){
          this.state = !this.state;
          return this;
        },
        meta: {
          name: 'light switch'
        }
      },
      switch1 = Object.create(switchPotato),
      switch2 = Object.create(switchPotato);

      test('Prototype mutations', function(){
          switch2.meta.name = 'Breaker switch';

          equal(switch1.meta.name, 'Breaker switch', 'Object and array mutations are shared');

          switch2.meta = {name : 'Power switch'};

          equal(switch1.meta.name, 'Breaker switch', 'Property replacement is instance-specific');
      });
      ```
* 2.使用new調用建構子
  *   實際上使用new運算子後接上一個函式時, 其實是呼叫call以建立新物件

      * 1.屬性或是函式以this.xxx的方式定義在物件中, 以new建立物件
        * 例如:

      ![](https://3195929128-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M4M0G8GO2MkGtHfarAf%2F-M4M0IHoyFvfGKjf7P-T%2F-M4M0MxLD0ZJ3FSWb8Bd%2F%E6%9C%AA%E5%91%BD%E5%90%8D2.jpg?generation=1586302921310779\&alt=media)

      * 2.屬性或是函式以this.xxx的方式定義在物件中, 以call建立物件
        * 例如:

      ![](https://3195929128-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M4M0G8GO2MkGtHfarAf%2F-M4M0IHoyFvfGKjf7P-T%2F-M4M0MxNSMJTAUDzEJSQ%2F%E6%9C%AA%E5%91%BD%E5%90%8D1.jpg?generation=1586302921212144\&alt=media)

      * 3.屬性或是函式都以json格式回傳
        * 例如:

      ![](https://3195929128-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M4M0G8GO2MkGtHfarAf%2F-M4M0IHoyFvfGKjf7P-T%2F-M4M0MxPdWjtpSDmibQ9%2F%E6%9C%AA%E5%91%BD%E5%90%8D3.jpg?generation=1586302921232035\&alt=media)

      * [http://codepen.io/JenHsuan/pen/yMxeXV?editors=0012#](http://codepen.io/JenHsuan/pen/yMxeXV?editors=0012)
      * [http://codepen.io/JenHsuan/pen/bqxVYQ?editors=1011](http://codepen.io/JenHsuan/pen/bqxVYQ?editors=1011)
