JavaScript-遍历js初始化时的this也就是windows对象的问题

发布于 2017-01-09 18:12:05 字数 686 浏览 1380 评论 2

突发奇想js开始执行时的this是个神马东西,胡乱堆了点代码,发现...
下面这段脚本如何执行完毕?求大神
目前是各浏览器结果不一样(限制递归层数)

<script>
var lever = 0;
function o2s(o){
var s = '';
for(i in o){
if(o[i]!=null){
if(typeof(o[i])=='object'){
lever++;
s += ns(lever)+i+'->'+o2s(o[i])+"<br/>";
}else{
s += i+'->'+o[i]+"<br/>";
}
}
}
return s;
}
function ns(n)
{
var s = "";
for (var i = 0; i < n; ++i){
s+='-';
}
return s;
}
document.write(o2s(this));
</script>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

浮生未歇 2017-07-08 09:31:23

你可以用alert来测试,alert(this)不就知道this代表的是什么了吗?

甜柠檬 2017-06-09 05:39:26

代码只看了大意,递归显示出object的属性的作用吧。
你这个脚本是放在script标签中的,也不属于任何对象,所以,this指的就是全局空间,在浏览器上就是window。

显示结果不一样,如果不是显示错误,只是结果不同,那可能是因为不同浏览器支持的功能不同,实现原理不同,所以window对象结构就有所不同。

想要查看JS的对象,用Chrome浏览器的开发者工具最方便,或者用console.debug(obj);可直接在console面板查看该对象。

this指针一般可理解为“离this这个关键字最近的对象”,比如,一个function在一个对象中,作为这个对象的属性,function中用到了this,this就指的这个对象。
还有种情况,function可以通过call或apply调用,调用时可以更改函数中this所指的对象,那这个this就要看调用者给的什么了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文