为何getEmployeeName()返回空字符串而非undefined?JS this绑定疑问
为啥getEmployeeName()返回空字符串而不是undefined?
嘿,这个问题问得很精准,我来给你拆解明白~
首先得搞懂this的绑定逻辑:当你把employee.getName这个函数单独赋值给getEmployeeName变量时,它就和原来的employee对象彻底解绑了。这时候直接调用getEmployeeName(),属于全局上下文调用,函数里的this会自动指向全局对象——在浏览器环境里就是window,Node.js环境里则是global。
那空字符串到底哪来的?答案藏在浏览器的window对象里:window有个内置的name属性,这个属性原本是用来给窗口命名的,它的默认值就是空字符串。所以当你调用getEmployeeName()时,this.name其实就是window.name,自然就返回空字符串啦。
要是换成Node.js环境运行这段代码,你会发现返回的是undefined——因为Node的global对象默认没有name这个属性,这时候this.name才会是undefined,和你一开始预想的结果一致。
你还可以自己验证下:在浏览器控制台输入window.name,回车就能看到它默认是空字符串;要是你手动把window.name = "Test",再调用getEmployeeName(),就会返回"Test"啦。
内容的提问来源于stack exchange,提问作者georgej
相关产品推荐
相关产品推荐

