目录
(一)原型
(1)原型定义:
每一个构造函数都有一个prototype属性,指向另一个对象,所以也称为原型对象
(1.1)我们可以把那些不变的方法,直接定义在prototype对象上,这样所有对象的实例就可以共享这些方法。
(1.2)构造函数和原型对象中的this都指向实例化的的对象
如何将共用方法定义在原型上
function Star(name,age){
this.name=name
this.age=age
}
}
Star.prototype.sing=function(){
console.log('唱歌')
}
//zly和ty就是实例对象,Star为构造函数,构造函数的this指向实例对象
const zly=new Star('赵丽颖',18)
const ty=new Star('唐嫣',18)
zly.sing()
ty.sing()
console.log(zly.sing===ty.sing)
定义公共的数组最大值,最小值,求和方法,使其挂载在原型上
// 用原型写求最大值,最小值和求和的方法,数组有默认的构造方法Array,...this为展开的意思,this指向的是实例对象,在其里面指向的为arr
const arr=[1,2,3]
Array.prototype.max=function(){
return Math.max(...this)
}
Array.prototype.min=function(){
return Math.min(...this)
}
Array.prototype.sum=function(){
return this.reduce((prev,item)=>prev+item,0)
}
console.log(arr.max())
console.log(arr.min())
console.log(arr.sum())
(2)constructor属性
constructor是原型对象prototype的 一个属性,其指向构造函数
如果给原型对象重新赋值,需要用constructor重新指回原型对象的构造函数
function Star(){
}
Star.prototype={
constructor:Star,
sing:function(){
console.log('唱歌')
},
dance:function(){
console.log('跳舞')
}
}
console.log(Star.prototype)
(3)对象原型
实例对象都会有一个属性__proto__指向构造函数的prototype原型对象
(4)原型继承
解决:不同对象里面包含相同的属性和方法,用构造函数,每次new都会创建一个新的对象
例如:黑猫白猫都继承了猫的,2只眼睛,四只爪子,但又有自己的特性
function Cat(){
this.eyes=2
this.claw=4
}
function BlackCat(){
}
// 通过原型继承Cat
BlackCat.prototype=new Cat()
BlackCat.prototype.constructor=BlackCat
// 给黑猫添加一个方法
BlackCat.prototype.color=function(){
console.log('黑色的猫')
}
const xiaobai=new BlackCat()
console.log(xiaobai)
function WhiteCat(){
}
WhiteCat.prototype=new Cat()
WhiteCat.prototype.constructor=WhiteCat
const xiaohei=new WhiteCat()
console.log(xiaohei)
黑猫中有color方法,白猫中没有
(二)原型链
原型链是一种查找规则,为对象成员查找属性方法提供了一条路。对象都有__proto__属性,这个属性指向他的原型对象,原型对象也是对象,也有__proto__属性,原型对象指向原型对象的原型对象,一层一层的链式结构就为原型链,最顶层找不到返回为null
(4.1)instanceof 运算符可以判断在哪条原型链上
Array instanceof Object