前言:原型与原型链这一块是学习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。