原型的概念及使用
原型是什么:
每个函数和类都有一个显式原型prototype
,里面存放一些公用的属性和方法,这些方法和属性,每一个实例都能访问到。而且每一个实例的对象都有一个隐式的原型__proto__
,对象的隐式原型都指向构造这个对象的函数或类的显式原型。
看到这里可能会有点晕,请看下面代码演示
function Person(name,age){
this.name = name;
this.age = age;
}
Person.prototype.say=function(){
console.log(`我的名字叫做${this.name},我的年龄是${this.age}`)
}
var p1 = new Person("小张",18);
var p2 = new Person("小红",16);
p1.say();
//我的名字叫做小张,我的年龄是18
p2.say();
//我的名字叫做小红,我的年龄是16
console.log(p1);
这里有一个函数Person
,上面有说过,每一个函数或类,都有显式原型prototype
,然后在Person.protype
里定义了一个say()
方法。
接下来通过函数Person
创建了p1和p2对象,我们定义的时候只给对象传了两个参数,并没有做其他操作,但是通过执行对象的say()
方法,也是可以正常打印,正是对象调用了原型prototye
里面的公用方法。
下面带大家看一下隐式原型__proto__
里面的参数都是有哪些
原型链:
在对象使用属性或调用方法的时候,会优先在自身的属性中寻找,如果找不到就去隐式原型__proto__
里面依次寻找,如果找不到就返回null
,我们把__proto__
与prototype
的链条关系称为“原型链”。js对象就是通过原型链,实现属性的继承。