1.原型:prototype,所有的函式都有一個屬性prototype,稱之為函式原型
默認情況下,prototype是一個普通的Object物件
默認情況下,prototype中有一個屬性constructor,它也是一個物件,它指向建構式本身
function Test(){}
Test.prototype:函式Test的原型
Test.prototype.constructor:函式Test的原型的建構式指向Test
(Test.prototype.constructor === Test) 結果為true
2.隱式原型:__proto__,所有的物件都有一個屬性__proto__,稱之為隱式原型
默認情況下,隱式原型指向創建該物件的,函式的原型
function Test(){}
var test = new Test();
(test.__proto__ === Test.prototype) 結果為true
上面的test物件如何獲得創建物件的建構式名稱?
test.__proto__.constructor.name
test.__proto__ === Test.prototype
test.__proto__.constructor === Test.prototype.constructor === Test
test.__proto__.constructor.name === Test.prototype.constructor.name === Test.name

如上圖所示:
通過函式add創建的物件,這些物件的隱式原型都指向函式add的原型
物件1.__proto__ === 物件2.__proto__ === add.prototype
所以add.prototype是物件1和物件2的一塊公共區域
3.原型鏈
原型鏈,鏈條的全貌:

上圖中的Function特殊,是JS引擎自己產生的
Function.__proto__ === Function.prototype
Object.prototype === null
所有的函式都是通過new Function()產生的,
所以,自定義函式.__proto__ === Function.prototype
當訪問一個物件的成員時: 1. 看該物件自身是否擁有該成員,如果有直接使用 2. 在原型鏈中依次查找是否擁有該成員,如果有直接使用
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/100515.html
標籤:JavaScript
