var main = document.querySelector('.main');
var box = document.querySelector('.box');
var row = 10;
var col = 10;
var lights = [];
//创建灯
for (var i = 0; i < 100; i++) {
var lightItem = document.createElement('p');
lightItem.setAttribute('class', 'lamp');
lightItem.index = i;
lightItem.onOroff = false;
lightItem.onclick = clickItem;
box.appendChild(lightItem);
lights.push(lightItem);
}
//判断上下左右灯的开关状态
function currentLight(obj) {
onORoff(obj);
if (obj.index >= 10) {
onORoff(lights[obj.index - 10]);
}
if (obj.index < 90) {
onORoff(lights[obj.index + 10]);
}
if (obj.index % 10 != 0) {
onORoff(lights[obj.index - 1]);
}
if (obj.index % 10 != 9) {
onORoff(lights[obj.index + 1]);
}
}
//设置计数,灯全部关掉后游戏结束
var flag = 0;
function onORoff(item) {
if (item.onOroff == false) {
item.style.background = 'yellow';
item.onOroff = true;
flag++;
} else {
item.style.background = 'black';
item.onOroff = false;
flag--;
}
}
var level = 2;
//初始化游戏
function init() {
for (var i = 0; i < level; i++) {
var rand = Math.floor(Math.random() * 99);
currentLight(lights[rand]);
}
}
init();
function clickItem() {
currentLight(this);
if (flag == 0) {
alert('YOU WIN! GO ON!')
level += 5;
init();
}
}
obj具体是谁?看到下面有个currentLight(this);难道是window吗?那样有什么作用
平时看到的都传个变量或者具体的值 这个真的让我懵逼了!
还有 这个lightItem.onOroff = false;听别人说这个onOroff是自己定义的一个属性,以前总以为要先定义一个obj对象才可以 自定义一个属性。像这样没有obj对象自定义的属性应该看Js高程的那个章节?前端小白求解答
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
你就把它看成
如果是普通OO写法就是类似
综上所述,问题中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 对象的一个属性