1. 程式人生 > >原型鏈詳解記錄

原型鏈詳解記錄

javascript中,一切都是物件, 函式也是物件,也有自己的屬性和方法,prototype就是每個函式都有的一個屬性,這個屬性就是一個物件(物件是屬性的集合),預設只有一個constructor屬性,指向函式本身。例如SuperType函式:(右側是該函式的原型)和Object函式(原型可以自定義自己的屬性)

 

接下來看程式碼:

function Example() {      
  Example.prototype.name = 'maomao';
  Example.prototype.getAge = function() {
    return 18;
  }  
}

var ex = new Example(); console.log(ex.name); console.log(ex.getAge());

可以看出來,Example是一個函式,ex物件是從這個函式中new出來的,這樣ex物件就可以呼叫Example.prototype中的屬性

ex.__proto__ === Example.prototype (每個物件都有一個隱藏屬性__proto__,指向建立這個物件的函式的prototype,稱隱式原型)

 

 instanceof表示的就是一種繼承關係,或者原型鏈的結構

 

function
Foo() {} var f1 = new Foo(); f1.a = 10; Foo.prototype.a = 100; Foo.prototype.b = 200; console.log(f1.a) //10 console.log(f1.b) //200

訪問一個物件的屬性時,先在基本屬性中查詢,如果沒有,再沿著__proto__這條鏈向上找,這就是原型鏈。

hasOwnProperty區分一個屬性到底是基本的還是從原型中找到的,從Object.prototype中來

 

參考:https://www.cnblogs.com/wangfupeng1988/p/4001284.html

個人認為這篇文章寫的非常清晰,基本js的基礎知識非常透徹的講解的很清楚,文章對參考文章做了一個總結作為日常積累,很多內容引用了原文