JavaScript原型到原型鏈

JavaScript原型到原型鏈javascript

  1. 每一個函數都有一個prototype屬性
函數的prototype屬性指向了一個對象,這個對象正是調用該構造函數而建立的實例的原型
什麼是原型呢? 每個JavaScript對象(null除外)在建立的時候就會與之關聯另外一個對象,這個對象就是咱們所說的原型,每個對象都會從原型繼承屬性。

    1. 每個對象(null除外)都有__proto__屬性java

這個屬性會指向該對象的原型

    1. 構造函數的prototype 指向的是 實例對象的原型函數

function Person(){

}
var person1 = new Person()

console.log(person1.__proto__ === Person.prototype). //true

    1. constructorspa

都一個原型都有constructor屬性指向關聯的構造函數
function Person(){

}
var person1 = new Person()

console.log(Person===Person.prototype.constructor). // true
console.log(Person===person1.__proto__.constructor) // true
// ES5獲取原型的方法
console.log(Person.prototype === Object.getPrototypeOf(person1))

實例和原型prototype

  1. 當讀取對象的屬性的時候,若是找不到,就會查找與對象相關聯的原型中的屬性,若是還查不到,就去原型的原型上去找,一直找到最頂層爲止
function Person(){

}
Person.prototype.name='hy'
var person1 = newPerson()

person1.name='ycl'
console.log(person1.name)// ycl

delete person1.name
console.log(person1.name)// hy

在這個例子中,咱們給實例對象 person1 添加了 name 屬性,當咱們打印 person1.name 的時候,結果天然爲 ycl。
可是當咱們刪除了 person1 的 name 屬性時,讀取 person1.name,從 person1 對象中找不到 name 屬性就會從 person 的原型也就是 person.__proto__ ,也就是 Person.prototype中查找,幸運的是咱們找到了 name 屬性,結果爲 hy。
可是萬一尚未找到呢?原型的原型又是什麼呢?

原型的原型code

  1. 原型也是一個對象,既然是對象,咱們就能夠用最原始的方法建立它
var obj = new Object()
obj.name='hy'
console.log(obj)

// 其實原型對象就是經過Object構造函數生成的,結合以前所講,實例經過__proto__指向構造函數的prototype

補充
  1. Object.prototype的原型指向null
console.log(Object.prototype.__proto__===null)//true
 
  1. 當獲取person. constructor時,其實person身上並無constructor屬性,當不能讀取到constructor屬性時,會從person的原型也就是person.prototype中讀取,正好原型中有該屬性。
console.log(person1.constructor===Person.prototype.constructor)
相關文章
相關標籤/搜索