①所有引用型別
都有乙個__proto__(隱式原型)
屬性,屬性值是乙個普通的物件②所有
函式
都有乙個prototype(原型)
屬性,屬性值是乙個普通的物件③所有
引用型別的__proto__
屬性指向
它建構函式的prototype
var a = [1,2,3];
a.__proto__ === array.prototype; // true
當訪問乙個物件的某個屬性時,會先在這個物件本身屬性上查詢,如果沒有找到,則會去它的舉例,有以下**__proto__
隱式原型上查詢,即它的建構函式的prototype
,如果還沒有找到就會再在建構函式的prototype
的__proto__
中查詢,這樣一層一層向上查詢就會形成乙個鏈式結構,我們稱為原型鏈
。
function
parent
(month)
var child = new parent('ann');
console.log(child.month); // ann
console.log(child.father); // undefined
在child中查詢某個屬性時,會執行下面步驟
:
訪問鏈路
為:
①一直往上層查詢,直到到null還沒有找到,則返回undefined
②object.prototype.__proto__ === null
③所有從原型或更高階原型中的得到、執行的方法,其中的this在執行時,指向當前這個觸發事件執行的物件
原型 和 原型鏈
每乙個js物件 null除外 都和另乙個物件相關聯。另乙個 物件就是我們熟知的原型,每乙個物件都從原型繼承屬性。所有通過物件直接量建立的物件都具有同乙個原型物件,並可以通過js object.prototype 獲得對原型物件的引用。通過關鍵字new和構造函式呼叫建立的物件的原型就是建構函式的 pr...
原型和原型鏈
原型鏈 例項物件與原型之間的連線,叫做原型鏈 function human human.prototype.age 22 var a new human console.log a.age 這裡的age掛載到了human的原型上面了。其實原型就是乙個物件。a為什麼能找到原型上面的物件呢?這裡例項物件...
原型和原型鏈
建構函式 function foo name age function 其實是 var a new object 的語法糖 var a 其實是 var a new array 的語法糖 function foo 其實是 var foo new function 的語法糖 new乙個物件的過程 建立乙...