1.方法过载
如果方法挂载在this上,那么每一个new出来的实例对象都有一份方法的副本,如果new100个实例对象出来,那么就会有100个方法副本,成为方法过载。(所有挂载在构造函数上就可以了,不要挂载在实例对象上)
2.原型与原型链
2.1原型:
1.每个函数(特指构造函数),都有一个属性prototype(显式原型),他的值是一个对象,只要往这个对象中添加方法,这些方法都会被new出来的实例对象共享。
2.实例对象都有一个属性叫_proto_ 隐式原型(新版本浏览器显示的是[[prototype]]),等于自己构造函数的显式原型prototype
3.原型对象里面,有一个属性叫constructor,指向的是构造函数本身
原型的作用:添加共享的方法
2.2 原型链
1.原型prototype本身也是一个实例对象,也有自己的构造函数,他的构造函数是Object。原型prototype也有属性__proto__隐式原型,指向Object的显示原型prototype。
2.Object的显示原型prototype也是实例对象,也有__proto__,指向null
3.Object的prototype上有一个属性constructor,指向构造函数Object自己本身
原型链作用:实例对象去查找方法,先找自己,自己没有,会沿着原型链去找,找到了就停下来使用,直到找到Object,找不到会报错
3.this指向---7种指向
1.全局中的this
2.函数中的this
3.对象方法中this
4.构造函数中this
5.定时器的回调中this
6.事件处理函数中this
7.箭头函数this
3.1 修改this的指向
1.call()和apply()
这两个方法都可以修改this的指向
这两个方法,都可以调用函数,在调用函数的同时,可以指定this的指向
函数名()//谁调用就指向谁
函数名.call(this对象,实参1,实参2)//不确定个数的参数,第一个参数是新的this指向,后面的参数按照所需要的实参依次传入
函数名.apply(this对象【实参1,实参2】)/两个参数,第一个参数是新的this指向,第二个参数为一个数组,数组中传入实参
2.bind()
可以把一个函数的this绑定在一个目标对象上,然后返回一个新的函数,此后,只要调用这个新的函数,新函数的this永远指向了绑定的目标对象
|