標籤:技術分享 它的 http 通過 擴充 his 代碼 blog 執行個體
在js中,原型也是一個普通的對象,通過原型我們能夠實現對象的屬性繼承。
首先,我們要明確參考型別有Array、Object、Function,這些參考型別都是能夠自由的擴充屬性。
1 var obj = {};2 obj.a = 10;3 obj.b = 20;4 5 obj; // Object {a: 10, b: 20}
我們上面說的這幾個參考型別都有一個屬性__proto__,這是一個普通的對象。而這個__proto__屬性是指向它的建構函式的prototype屬性。我們可以在代碼中看一看。
1 // 建構函式 2 function Foo(name, age) { 3 this.name=name; 4 this.age=age; 5 } 6 7 // 執行個體化一個Foo 8 var foo = new Foo("居客", 21); 9 10 // 我們看一下foo的屬性11 foo;
可以看到在foo中除了name和age兩個屬性之外,還有一個__proto__屬性,點開這個屬性我們發現裡面有個建構函式Foo,同時我們進行以下的驗證。
同時,對於所有的函數來說都有一個prototype屬性,這也是一個普通的對象,當我們執行個體化了一對象之後,在執行個體化出來的對象上找不到我們想要的方法的時候,這時候就會通過自身的__proto__屬性去它的建構函式的prototype屬性裡面去找有沒有這個方法,有的話就能夠調用,這也是為什麼能通過原型來完成繼承的原因。
var Foo = function(name) { this.name = name;}Foo.prototype.Name = function() { console.log(this.name);}var foo = new Foo(‘居客‘);foo.Name(); // 居客
這就是對於原型以及原型鏈的基本的一些概念了,希望能有所協助。
js之原型鏈的理解