js原型和原型链

原型和原型链

什么是原型?

在js中,每当定义一个函数数据类型(ObjectFunctionArrryDate等)的时候都会自带一个prototype对象,这个对象就是我们说的原型。

原型有什么作用?

先来看一个例子:

function Person(){
	this.showName=function(){
		console.log("zhangsan")
	}
}
let person1=new Person();
let person2=new Person();
console.log(person1.showName===person2.showName) 

很容易就直到输出的是false,因为两个实例对象指向的不是同一个地方。那再看下面这个例子:

function Person(name){
	this.name=name;
}
Person.prototype.showName=function(){
	console.log(this.name)
}
let person1=new Person("zhangsan");
let person2=new Person("lisi");
console.log(person1.showName===person2.showName) 

这样输出的结果就是true了,因为两个实例对象共享同一个方法。所以我们就能知道原型的作用就是实现数据的共享

什么是原型链

简单来说就是原型与原型层层线连接的过程称为原型链,原型链是通过 proto 链接起来的,所以为什么实例对象可以使用构造函数的prototype原型上的属性和方法,就是因为实例对象有__proto__的存在,我们看的例子:

function Person() {}
var person = new Person();
console.log(person.__proto__ === Person.prototype);

最终输出的就是true,下面是原型链的图片展示

img

基于原型链的查找方式

function Person(){
	this.name="zhangsan";
}
Person.prototype.name="lisi"
Object.prototype.name="wangwu"
let person1=new Person();
console.log(person1.name) 
  • 首先person1对象会去本身去找,看自己有没有name属性,如果有则查找结束
  • 如果本身没有就会沿着原型链去原型上找,找到了就结束
  • 如果原型上还是没有,就会去Object原型对象上去查找
  • 如果还没有则会报错
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页