因为对象obj的方法被对象document.getElementsByTagName("div")[0]引用,所以objApply内的this就不在指向obj了,而是指向对象document.getElementsByTagName("div")[0] , 所以输出的是undefind
解决方法1 :通过匿名函数来调用对象中的objApply方法,这样就不会改变obj.objApply里面this的指向了
解决方法2 : 通过bind或者apply,call等方法可以把objApply里面的this进行重新绑定新的指向
在开发中call跟apply还能用在继承上面,在sleep的方法继承了eat的方法,所以可以能获取到this.name
此时用apply重定向了,为什么会报NaN呢?
因为ageState方法里面的this指向的是age,并不是Person所以输出的是NaN
解决方法1
解决方法2
解决方法三
apply() 的第二个参数arguments
这里面的Person.apply(this,arguments)
this代表的就是Teacher这个对象
arguments 是一个数组来的,也就是 ['美莹' , '19' , 'good']
就是说用Teacher去执行Person这个类里面的内容,在Person这个类里面存在this.name等之类的语句,这样就将属性创建到了Teacher对象里面了
也可以换一种思路来理解
就是 警察抓小偷 老师教书 清洁工打扫卫生
========================================
有一天清洁工也想要抓小偷
则 警察.抓小偷.apply(清洁工,小偷)
清洁工也能抓小偷了
===========================================