徹底理解原型、原型鏈、constructor

前言:原型與原型鏈這一塊是學習js最重要的也是最難理解的一部分對我來說,所以今天就整理下這塊的知識點。

一、構造函數

1、什麼是構造函數:構造函數就是通過new關鍵詞生成實例的函數。
2、構造函數特點:

  • 需要new實例化。
  • 內部使用this對象指向即將要生成的實例對象
  • 首字母大寫,用於區分普通函數
	function Person( name,age) {
		this.name = name;
		this.age = age ;
		this.sayName= function(){
			console.log(this.name);
		}
	}
	var p = new Person('xiaoming',18);

補充下new的作用:調用new 方法之後

  • 執行該函數
  • 隱式創建一個對象
  • 把該對象和函數的this執行綁定
  • 把加在this上的屬性和都加到該對象上
  • 函數執行完畢,返回該對象
二、prototype

原型:在JS中,每個函數都有一個屬性叫做prototype,prototype本身是一個對象,在該對象裏我們可以定義一些該函數的實例化對象的共用方法,避免重複創建方法。
一些在實例化對象中可以通用的數據或方法,如果我們都直接寫在對象中,那每實例化一個對象都多一堆數據,這樣的話,比較佔用內存。

三、__proto__

__proto__:在JS中,每個對象都有一個屬性__proto__(隱式原型),指向該對象構造函數的原型。

四、constructor

constructor:在原型對象中有一個constructor屬性,指向該原型對象的構造函數。

function Person() {}
var xiaowang = new Person()
console.log(xiaowang.__proto__ ===Person.prototype)//true
console.log(Person.prototype.constructor ===Person)//true

var o={};
o.__proto__=== Object.prototype
五、原型鏈

原型鏈:當我們調用對象的某個方式(屬性)時,會先在該對象自身查找。如果找不到,就通過對象的__proto__屬性,找到其構造函數的prototype對象,從這裏找這個方法。如果還找不到就找prototype(Object)的構造函數(Object)中的prototype,如果還找不到就報undefined。

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