javascript - 求解答下关于这段代码的困惑
黄舟
黄舟 2017-04-11 13:22:48
[JavaScript讨论组]


obj具体是谁?看到下面有个currentLight(this);难道是window吗?那样有什么作用
平时看到的都传个变量或者具体的值 这个真的让我懵逼了!
还有 这个lightItem.onOroff = false;听别人说这个onOroff是自己定义的一个属性,以前总以为要先定义一个obj对象才可以 自定义一个属性。像这样没有obj对象自定义的属性应该看Js高程的那个章节?前端小白求解答

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(4)
巴扎黑
lightItem.onclick = clickItem;
...
...
function clickItem() {
    currentLight(this);
    if (flag == 0) {
        alert('YOU WIN! GO ON!')
        level += 5;
        init();
    }
}

你就把它看成

lightItem.onclick = function() {
    currentLight(this);
    if (flag == 0) {
        alert('YOU WIN! GO ON!')
        level += 5;
        init();
    }
}

如果是普通OO写法就是类似

function ClassA(){
    this.onclick = function(){
        //balabalabala....
        console.log(this);
    }
}
var a = new ClassA();
a.onclick();//this 必然是指向ClassA的实例a啦。

综上所述,问题中this也就是指向被点击的某个p(lightItem)啦
关于lightItem.onOroff = false的问题,lightItem也是一个obj啦,只不过不是你自己定义的,它是一个p,但是这不影响你可以在它上面随意的添加自己定义属性哟。

伊谢尔伦

问题1:obj具体是谁?看到下面有个currentLight(this);难道是window吗?
答: obj是参数,它的值是不确定的。
至于在 currentLight(this); 下它的值可以这么分析:
1) 寻找到调用clickItem的地方。


2) 可以看到调用clickItem函数的是lightItem这个元素。故这里的this就是
lightItem元素,而非window对象。
我也贴一下JavaScript权威指南(edition6 第8章函数 引言)中的解释:


@熊丸子 的解释也不错,题主可以看一下。
问题二: 这个lightItem.onOroff = false;听别人说这个onOroff是自己定义
的一个属性,以前总以为要先定义一个obj对象才可以 自定义一个属性。
这一点我觉得应该是你对于creatElement方法不是很理解。于是乎,我再次贴图:


同时贴出另一张图来证明该方法的返回值确实是一个对象:

希望我的解释可以帮你理解问题所在,谢谢。

伊谢尔伦

调用函数的时候传入的参数是谁,obj就是谁,currentLight(lights[rand]);,obg就是lights[rand];currentLight(this);obj应该是你点击的对象,没看到这个函数在哪里调用的。

迷茫

obj 指 lights 数组中的某一个元素 或者 lightItem.onclick 你点击的这个元素,currentLight(this)中的 this 指 lightItem.onclick 你点击的这个元素,lightItem.onOroff = false 指你自己定义的 lightItem 对象的一个属性

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

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