彻底理解原型、原型链、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。

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