扫码关注官方订阅号
var obj1 = {name : "blue",fn : function(){alert(this.name);}}; var newFunction = obj1.fn; newFunction();
为啥alert的是空,确不是undefined ?
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
this指向已经是window了。我在Chrome控制台输入window,发现它有name属性,而且为空。
window
name
变成了全局变量window, window貌似是有name属性的。。。坑
首先,obj1.fn 指向一个匿名函数
function() { alert(this.name) }
之后,该匿名函数又被赋予变量 newFunction,最后是通过 newFunction 进行调用,则函数的上下文 this 则变为 window. 而 window 上 name 属性,name 属性为窗口的名称,其值为字符串,没有设置的情况下为空字符串,则是 window.name 为 ''. 所以alert为'',一个空字符串
this指向已经改变,如下做就好:
var newFunction = obj1.fn.bind(obj1);
具体解释请看我的这个笔记:关于javascript中this的trick
函数中的this所指向的上下文对象由实际运行时决定,当使用obj.fn()调用函数fn时,函数fn中的this指向的上下文对象为obj,当直接将函数fn的引用赋值给newFunction后,此时调用newFunction()时,其中的this已经脱离了obj这个执行上下文。而JavaScript执行时的默认上下文为window这个全局对象,而此时window对象中并没有定义window.name这个属性,所以面试官希望得到的回答是undefined,正确结果就是这个了。
this
obj.fn()
fn
obj
newFunction
newFunction()
JavaScript
window.name
undefined
window有name这个属性的,获取/设置窗口的名称,一般用于作为 JSONP 的一个更安全的备选来提供跨域通信...
因为此时的this指向window对象,this关键字在JS中的使用一定要弄明白哦,哈哈面试必考题之一吧推荐楼主看这篇文章http://javascriptissexy.com/understand-javascripts-this-with-clarity-and-master-it/
var obj1 = {name : "blue",fn : function(){alert(this === window);}}; var newFunction = obj1.fn; newFunction();
运行一下这段代码 这时候的this已经是window对象了
name比较特殊,不建议将其作为属性,可以考虑将其作为自己的保留字
我试了下alert(window.name)确实显示为空 ,web storm提示window有该属性的...哈,好坑
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
this指向已经是window了。

我在Chrome控制台输入
window,发现它有name属性,而且为空。变成了全局变量window, window貌似是有name属性的。。。坑
首先,obj1.fn 指向一个匿名函数
之后,该匿名函数又被赋予变量 newFunction,最后是通过 newFunction 进行调用,则函数的上下文 this 则变为 window. 而 window 上 name 属性,name 属性为窗口的名称,其值为字符串,没有设置的情况下为空字符串,则是 window.name 为 ''. 所以alert为'',一个空字符串
this指向已经改变,如下做就好:
具体解释请看我的这个笔记:关于javascript中this的trick
函数中的
this所指向的上下文对象由实际运行时决定,当使用obj.fn()调用函数fn时,函数fn中的this指向的上下文对象为obj,当直接将函数fn的引用赋值给newFunction后,此时调用newFunction()时,其中的this已经脱离了obj这个执行上下文。而JavaScript执行时的默认上下文为window这个全局对象,而此时window对象中并没有定义window.name这个属性,所以面试官希望得到的回答是undefined,正确结果就是这个了。window有name这个属性的,获取/设置窗口的名称,一般用于作为 JSONP 的一个更安全的备选来提供跨域通信...
因为此时的this指向window对象,
this关键字在JS中的使用一定要弄明白哦,哈哈面试必考题之一吧推荐楼主看这篇文章http://javascriptissexy.com/understand-javascripts-this-with-clarity-and-master-it/
运行一下这段代码 这时候的this已经是window对象了
name比较特殊,不建议将其作为属性,可以考虑将其作为自己的保留字我试了下alert(window.name)确实显示为空 ,web storm提示window有该属性的...哈,好坑