2017-11-17 36 views
0

我正在写一个hang子手游戏,它的效果很好,但是这个变量块真的很难看。我知道我已经在PHP中完成了一些操作,然后将所有需要的变量放入数组中并将其抽出。有没有一种方法可以在抓住我的DOM元素的同时通过Javascript实现?是否有更优雅的方式来声明我的JavaScript变量?

let _ = []; 
let correct = []; 
let wrong = []; 
let underscores = document.querySelector('.underscores'); 
let correctBlock = document.querySelector('.correct'); 
let wrongBlock = document.querySelector('.wrong'); 
let scoreBlock = document.querySelector('#score'); 
let btn = document.querySelector('.btn'); 
let hint = document.querySelector('.hint'); 
+0

您可以用'let a = 1,b = 2,...'声明变量以避免重复'let'。 –

+0

你在说PHP中的register_globals($ array)吗?在JS中没有这样的东西,它在PHP中也不常用。 – Barmar

回答

2

我想你指的是在PHP中双$? (已经有一段时间了)

不,对不起。

我建议你创建一个地图让事情变得包含:

let score = { 
    _: [], 
    correct: [], 
    wrong: [] 
} 

let blocks = { 
    underscores: document.querySelector('.underscores'), 
    correct: document.querySelector('.correct'), 
    wrong: document.querySelector('.wrong'), 
    score: document.querySelector('#score') 
} 

let btn = document.querySelector('.btn'); 
let hint = document.querySelector('.hint'); 

用法:

+0

这正是我所期待的!非常感谢。不知道为什么我downvoted哈哈,这似乎更优雅 –

+0

是的,我也不知道。高兴地帮助:) – Phix

+1

这很好,没有想到外面的块,呃,我的意思是,盒子。 OP想要一个更优雅,而不是简洁的解决方案,所以在这里,我们有它 –

1

你就可以得到最短的是:

let _ = [], 
    correct = [], 
    wrong = [], 
    underscores = document.querySelector('.underscores'), 
    correctBlock = document.querySelector('.correct'), 
    wrongBlock = document.querySelector('.wrong'), 
    scoreBlock = document.querySelector('#score'), 
    btn = document.querySelector('.btn'), 
    hint = document.querySelector('.hint'); 

我看不到的方式来概括/压缩这一点,因为你选择是完全不同的元素。老实说,这很好!

+0

谢谢奥利弗。我在想,如果我把所有东西都放进一个数组中,事情看起来不错,但我认为它是不可能的。感谢您的更新块! –

0

声明静态变量例如功能,参考const关键字(而不是)。 而不是重复让/ const关键字,只需用comma operators

const underscores = document.querySelector('.underscores'), 
     correctBlock = document.querySelector('.correct'), 
     wrongBlock = document.querySelector('.wrong'); 

1

不是真的。我喜欢将我的控件分组在一个结构中,但我不能说它更好。

let ctrls = { 
    underscores: document.querySelector('.underscores'), 
    correctBlock: document.querySelector('.correct') 
}; 
1

您可以使用并行分配进行映射。较短,但我个人不会这样做:

let [underscores, correctBlock, wrongBlock, scoreBlock, btn, hint] = 
    ['.underscores', '.correct', '.wrong', '#score', '.btn', '.hint'] 
    .map(selector => document.querySelector(selector)) 
+0

有趣!我喜欢。 – Phix

相关问题