原型是乙個物件,我們稱prototype為原型物件。
建構函式通過原型分配的函式是所有物件所共有的。
js規定,每乙個建構函式都有乙個prototype屬性。prototype就是乙個物件,這個物件的所有屬性和方法,都會被建構函式所擁有。
我們把不變的方法,直接定義在prototype物件上,這樣所有物件的例項就可以共享這些方法。
原型的作用是共享方法,減少記憶體的使用。
function star(name,age)*/
}/*star.prototype.sing=function()*/
star.prototype=,
dance:function()
}var ldh=new star("劉德華",18)
var zxy=new star("張學友",20)
console.log(ldh.sing===zxy.sing)
物件身上系統新增乙個__proto__指向建構函式的原型物件
物件都有乙個屬性__proto__指向建構函式的prototype原型物件,之所以物件可以使用建構函式prototype原型物件的屬性和方法,就是因為有__proto__的存在。
__proto__物件原型和原型物件prototype是等價的
__proto__物件原型的意義在於為物件的查詢機制提供乙個方向,或者說一條路線
console.log(ldh) //可以看到__proto__
console.log(ldh.__proto__===star.prototype) //true
//方法的查詢規則:首先檢視ldh物件身上是否有sing方法,如果有就執行這個物件上的sing;
//如果沒有sing方法,因為有__proto__的存在,就去建構函式原型物件prototype上去找
注:建構函式、例項、原型物件三者的關係
原型鏈為物件成員查詢提供乙個方向,或者說一條路線
(1)、當訪問乙個物件的屬性(包括方法時),首先查詢這個物件自身有沒有該屬性
(2)、如果沒有就查詢它的原型(也就是__proto__指向的prototype原型物件)
(3)、如果還沒有就查詢原型物件的原型(object的原型物件)
(4)、依次類推一直找到object為止(null)
原型 和 原型鏈
每乙個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乙個物件的過程 建立乙...