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>
文章標籤
全站熱搜