javascript - 闭包后的取值问题。。。
迷茫
迷茫 2017-04-10 17:57:55
[JavaScript讨论组]

闭包很多基本情况都了解了,以为自己已经把JS的一个难点搞懂了,结果看到网上这个demo又不是很懂了。。

var Demo = {  
    index: 0,  
    defaults: { width: "1200px",  
            height: "500px"},  
     init: function(){  
       console.log(this.defaults);  
     }  
}  
Demo.init(); //Object {width: "1200px", height: "500px"}  

Demo.init();调用init属性的匿名函数,在控制台输出this.defaults,而this指向的就是Demo()不是吗,Demo中的defaults属性的值,为啥不是width: "1200px", height: "500px",那个object{}哪来的。。。


由于好心人提醒。我这问题其实不涉及闭包,把题目更正免得被误解。

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(4)
高洛峰

Demo.defaults 是一个对象不是字符串。

var Demo = {  
    index: 0,  
    defaults: { width: "1200px",  
            height: "500px"},  
     init: function(){  
       return this.defaults
     }  
}  
Demo.init()==Demo.defaults //true
巴扎黑

题主,你这函数不是会报错么?
分析一下执行流程:
先申明了一个Demo,
然后调用Demo.init方法执行之,此时init的匿名函数中的This指向调用者Demo,
然后里面有一个回调Demo函数,这个时候就应该报错了啊!

我想你的误解的地方可能在于this的指向。
https://developer.mozilla.org...

PHPz

我刚刚还在疑惑Demo(this.defaults);是个什么-_-||,,,,,defaults是个对象

黄舟
var Demo = {  
    index: 0,  
    defaults: { width: "1200px",  
            height: "500px"},  
     init: function(){  
       console.log(this);  
     }  
}  
//此时this指向的是Demo对象
Demo.init()//Object {width: "1200px", height: "500px"}  

//此时this指向的是a函数的作用域也就是window对象
function a(fn){
  fn();
}

a(Demo.init)//undefined
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号