1. 每個函數function都有一個prototype,即顯式原型(屬性)
2. 每個實例對像都有一個__proto__,可稱為隱式原型(屬性)
3. 對像的隱式原型的值為其對應構造函數的顯式原型的值
4. 總結:
-- 函數的prototype屬性:在定義函數時自動添加的,默認值是一個空Object實例對象
-- 物件的__proto__屬性:創建對像時自動添加的,默認值為構造函數的prototype屬性值
-- 程序員能直接操作顯式原型,但不能直接操作隱式原型(ES6之前)

 

<script type="text/javascript">

  // 定義函數
  function Fn() {
    // 內部語句:this.prototype = {};
  }
  // 1. 每個函數function都有一個prototype,即顯式原型(屬性),默認指向一個空的Object實例對象
  // 函數一創建(定義),就有prototype
  console.log(Fn.prototype);

  // 2. 每個實例對像都有一個__proto__,可稱為隱式原型(屬性)
  // 創建函數的實例對象,創建時就有__proto__
  const fn = new Fn();    // 內部語句:this.__proto__ = Fn.prototype;
  console.log(fn.__proto__);

  // 3. 對像的隱式原型的值為其對應構造函數的顯式原型的值
  // prototype__proto__保存的都是地址值
  console.log(Fn.prototype === fn.__proto__);   // true

  // 給原型添加方法
  Fn.prototype.test = () => console.log('test()');

  // 通過實例調用原型的方法
  fn.test();

</script>

 

文章標籤

創作者介紹
創作者 bingzhichen 的頭像
bingzhichen

空境界

bingzhichen 發表在 痞客邦 留言(0) 人氣()