我可以说,对于那些来自像C#这样的语言的人来说,“this”关键字是Javascript中最令人困惑的部分。
我在互联网和StackOverflow上也读过很多关于这方面的内容。喜欢在这里和在这里.
我知道“this”关键字将绑定到上下文。在构造函数中,它将被绑定到正在创建的对象,当没有即时上下文时,它将绑定到全局对象(即窗口)
我知道这一切,但困惑仍未完全消除;所以最好的理解方法是测试代码。
所以我决定写一些小代码,我惊讶于这
关键字。
下面是我测试的代码:
函数sayHi(名称){var tt=名称;返回{ss:tt,测试,work:函数(anotherName){警报(“hiiii”+另一个名称);}};}//这个方法调用现在没有任何效果sayHi(“约翰”);var hi2=新sayHi(“华莱士”);hi2.工作(“五月”);警报(hi2.ss);
如预期,警报窗口将显示(5月8日),然后显示(华莱士)。现在请注意,该行sayHi(“约翰”);
根本没有效果。
现在,当我只更改一件事(更改var tt=>this.tt)时,就会出现混乱:
函数sayHi(名称){//这是我唯一做的改变。this.tt=名称;返回{ss:tt,测试,work:函数(anotherName){警报(“hiiii”+另一个名称);}};}//现在这个行调用将有问题sayHi(“约翰”);var hi2=新sayHi(“华莱士”);hi2.工作(“五月”);警报(hi2.ss);
结果让我惊讶的是,当警报发出时(Hiiiiiii May),然后(John)没有(wallace);
所以我有了评论这句话的想法sayHi(“约翰”);
但这导致整个代码无法正常工作。
这个演示在这里
我知道这可能是个新问题。但这真的很令人困惑,我确实试着阅读了许多文章和SO问题,但我忽略了这一点。
为什么这条线sayHi(“约翰”);
将hi2.ss设置为John??以及为什么当我们删除它时,它会破坏代码;尽管我们调用问好
方法,使用新的
关键词之后??