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-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
你就把它看成
如果是普通OO写法就是类似
综上所述,问题中this也就是指向被点击的某个p(lightItem)啦
关于lightItem.onOroff = false的问题,lightItem也是一个obj啦,只不过不是你自己定义的,它是一个p,但是这不影响你可以在它上面随意的添加自己定义属性哟。
调用函数的时候传入的参数是谁,obj就是谁,currentLight(lights[rand]);,obg就是lights[rand];currentLight(this);obj应该是你点击的对象,没看到这个函数在哪里调用的。
obj 指 lights 数组中的某一个元素 或者 lightItem.onclick 你点击的这个元素,currentLight(this)中的 this 指 lightItem.onclick 你点击的这个元素,lightItem.onOroff = false 指你自己定义的 lightItem 对象的一个属性