js 原型對象和原型鏈理解

參考鏈接 https://www.jb51.net/article/105090.htm

1、原型對象的用途是爲每個實例對象存儲共享的方法和屬性,它僅僅是一個普通對象而已。並且所有的實例是共享同一個原型對象,因此有別於實例方法或屬性,原型對象僅有一份。

每個對象都有一個__proto__屬性,指向它的prototype對象,每個函數都有一個prototype屬性(js中萬物皆對象,函數也是對象,是function Funtion(){}的實例),指向他的prototype對象。這個prototype對象包含兩個屬性,一個是__proto__屬性再次指向當前對象的prototype對象,一個是constructor屬性指向當前對象的構造函數。這樣每個對象沿着prototype屬性向上查找,最後Object.prototype.__proto__爲null

一張經典圖

function Person(name,age,gender) {
this.name=name;
this.age=age;
this.gender=gender;
this.say=function () {
    alert(this.name)
  }
}
var person1=new Person('鍾女士',80,'女');
var person2=new Person('張女士',80,'女');
console.log(person2)  //{name: "張女士", age: 80, gender: "女", say: ƒ}
console.log(person1)  // {name: "鍾女士", age: 80, gender: "女", say: ƒ}


每個對象都有一個__proto__屬性,指向它的prototype對象,每個函數都有一個prototype屬性(js中萬物皆對象,函數也是對象,是function Funtion(){}的實例),指向他的prototype對象
Person.prototype == person1.__proto__    //true

prototype對象包含兩個屬性,一個是constructor屬性指向當前對象的構造函數
Person.prototype.constructor == Person  //true


Person.__proto__.__proto__    //Object

Person.prototype.constructor
/*
ƒ Person(name,age,gender) {
this.name=name;
this.age=age;
this.gender=gender;
this.say=function () {
    alert(this.name)
  }
}
*/

Person.prototype.__proto__ === person1.__proto__.__proto__   //true
Person.prototype.prototype    //undefined
Person.prototype.__proto__.__proto__    //null
Person.prototype.__proto__.constructor   //ƒ Object() { [native code] }

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章