00:00
好的,来同学们解决这问题啊。change whether里的this指向是under find,这不是我们想要的,我们想要的是change whether里的this指向是whether的实例对象,我只有在这里边拿到了whether的实例对象。我才可以点state.is hot去修改它的值对吗?好了,开始写,我用一行代码就能把这个问题解决啊,我先写着,你看看能不能看得懂,如果可以,那证明呢,你之前的知识掌握的还是不错的啊,啊,不是在我这个课堂上讲的啊,是一个特殊的关键字啊,我先写着啊,你看一下this点。Change whether等于this.change whether点用这么一个词叫bad this。加了这句话问题就能解决,来,我们试试啊,我先不加,演示一下这个问题。走刷新。点击是吧,安find好加这句话保存切回来点击谁wiser的实例对象,那所以说接下来你拿东西,那还能拿不到吗?是吧,诶说老师那怎么解决的呢?分析同学不要有那么大的压力,有些同学呢,一看到这个是吧,诶之前在这个呃线下去讲啊,班级同学就说,哎呀老师这东西脑脑仁儿疼慢点同学你说从本质上来说,它是不是一个副值语句呢?
01:26
那是没毛病的赋值语句吧,先分析右侧是什么对吧?来,走这this慢点来,一个一个来,同学,This是谁?This是谁?构造器中的this是组建的实例对象,对吗?点change weather,我想问你的是它自身有没有change weather。你可能往左一看,诶,老师,有这不你刚放上去的吗?this.change whether同学,第二十五行代码还没执行完呢,先分析右侧的this是组建实例对象对吧?点change whether还没到这一步呢,所以说自身自身有吗没有。
02:05
老师没有就报错,不,因为change whether放在了whether的原型对象上。纵使实例自身没有,也会顺着原型找到原型上的,对吗?所以说this.change whether同学,你说他找到了谁呢?是不是找到了它?好了,它掉了谁呢?第二,BB干嘛呀?B能做两件事儿,一给你生成一个新的函数,二呢,帮你改了函数里的this,那到底改成了什么呢?我得看你传的是什么,那你传的是什么呢?Z。那this是谁啊?不要想太多,构造器中的this就是whether的实例对象。同学,那你觉不觉得红色框的代码一旦执行完了,你手里边握住了一个函数对吗?一个新的函数,而且这个函数里的this已经成功的变为了whether的实例对象,对吗?好?然后你把这函数怎么着了呢?
03:01
是不是放到了实力的自身,然后你还给这个函数起了一个名字叫做change weather,对吗?哎,OK,所以说同学写完了第二十五行代码之后啊。你的实力对象自身呢,就多了一个方法,叫change weather。好,那不信你瞧。刷新一下啊。点击。走,是不是出来了一个change weather,哎,OK,那我再问你一句,同学。等回头我真正去点这个的时候,我想问你啊。你说你掉的change weather,到底是原形上的那个change weather,还是说挂在实力自身上的那个change weather呢?答案当然一定是自身上的那个,那所以说你看一下输出的自身有没有change weather有原型上呢?有没有也有,那么按照他查找的顺序来说,自身已经有了,还会再往这看吗?不会了。
04:05
说老师,那我们就把圆形上的这个就删下去呗,同学你一定要注意,原形上如果刚开始没有,你怎么拿着一个东西生成它呢?所以说圆形上的东西得有,我拿着圆形上的生成一个新的挂在实力自身,这才是一个正常的动作。OK,可能有同学忘了办的吧,来简单说一下啊,同学,demo.atl我这呢就不留下痕迹了,因为这段代码实在是太简单了啊,走定义一个函数啊,名字呢叫做DEMO啊,我在这个函数里面呢,就输出this。这叫什么调用啊,直接调用,那直接调用里的this是谁呀?同学,那必须是window对不对?哎,那你说如果我做这些事呢,DEMO点。我把里的this改成一个对象好。控制台输出什么呀。
05:01
哎,来看看吧,我套路了,你控制台上不多输出任何的东西,因为你的第13行代码不会触发控制台输出的,老师呢,这不有东西吗?一句话,点半的方法返回的是一个新函数,那么这个新函数你没有去调用,所以说你想玩,那就得看X等于它,然后X小括号,这回才叫调用函数,对吧?新的函数交给了X直接调用,那调的时候已经帮你把this改好了,是不是改成这个东西了,所以说你看嘛,This改完了。哎,OK,所以说我们用这种方式去解决了,来我测试各位一下,我看你有没有真的懂。同学,我这儿呢,我想改成DEMO。也就是说,我顺着原型找到了原型对象上的那个change whether,我调用点半生成了一个新的函数,并且把函数里的this改成了whether的实例对象,那这个新的函数我挂在了实例自身的DEMO属性上,那你觉得我接下来应该把哪一行代码也改一下才对?
06:11
说老师不改好像也行吧,那你试试吧,如果你不改,回到这个案例里边,我刷新一点还是unde find,为什么呀?嘿嘿,同学,如果你不改,你觉不觉得你这指定的还是原型上的那个函数啊,人家拉出来直接执行,那this当然就是安find呀,所以说不要再去调这个了,得调谁呢?DEMO是不是这得改一下啊?好了,这回你看一下来走是吧。啊,来同学,那我再考你一下,如果这不叫change whether的,这叫做test OK,我这呢不想叫DEMO了,我这呢想叫做,呃,Nice啊,这个函数,你告诉我这行代码得怎么改吧。一个红色框,一个粉色框,你告诉我红色改成谁?红色改成谁,那我得看你这真正要掉的是谁,所以说红色改成nice啊,那用红色的来,红色的改成nice,那我再问你粉色的得改成谁呢?你得顺着圆形链找,你这么的肯定找不到的呀,是吧?那所以说粉色的呀,你得改成test,你觉得呢?
07:20
来,我们试试,这改成nice,那这改成test好了,你去点OK,没问题,如果你不改,那错误在这儿其实就出现了,原形链上也没有change weather,那所以说在这儿它一定说不能够怎么的,哎,调用band在and find身上,因为人家找不见change whether嘛,好了,都给它改回正常了,Change whether,那这儿呢,Change whether,那这呢,Change whether OK好了,那所以说同学我问你写到这儿,This指向问题,我们是不就搞定了呢?哎,写好一段注释叫做解决。Change weather中this指向问题。好了,这一小节呢,我们停一下。
我来说两句