目前,我对javascript还很陌生,我偶然发现了一个javascript关键字(.logic)。我试着用谷歌搜索这个关键字,但我找不到答案。谁能解释一下这是什么意思?什么时候,为什么我们要使用它?它看起来像是在按逻辑顺序创建对象。
以下是代码的片段:
var checkboxes = slice(document.querySelectorAll('.checkbox'));
for (var checkbox of checkboxes)
checkbox.logic = new Checkbox(checkbox);
*注意:我现在正在尝试学习ARIA。这就是我不使用原生复选框的原因。
下面是HTML部分的代码:
<div class="demo">
<h2>Custom checkboxes</h2>
<div tabindex="0" class="checkbox" checked>
Tim-Tams
</div>
<div tabindex="0" class="checkbox">
Mint slices
</div>
</div>
以下是javascript代码:
function Checkbox(el) {
this.el = el;
this.el.addEventListener('keydown', this.handleKeyDown.bind(this));
this.el.addEventListener('click', this.toggle.bind(this));
// Initialize role and aria-checked state.
this.el.setAttribute('role', 'checkbox');
if (this.el.hasAttribute('checked')) {
this.el.setAttribute('aria-checked', 'true');
} else {
this.el.setAttribute('aria-checked', 'false');
}
}
Checkbox.prototype.handleKeyDown = function(e) {
switch(e.keyCode) {
case VK_ENTER:
case VK_SPACE: {
this.toggle();
break;
}
}
};
Checkbox.prototype.toggle = function() {
if (this.el.hasAttribute('checked')) {
this.el.removeAttribute('checked');
// Keep checked attribute and aria-checked in sync.
this.el.setAttribute('aria-checked', 'false');
} else {
this.el.setAttribute('checked', '');
// Keep checked attribute and aria-checked in sync.
this.el.setAttribute('aria-checked', 'true');
}
};
//HERE IS THE QUESTION PART================================
var checkboxes = slice(document.querySelectorAll('.checkbox'));
for (var checkbox of checkboxes)
checkbox.logic = new Checkbox(checkbox);
发布于 2018-06-23 09:05:36
所以,我在原型继承方面相当初级,所以任何人都可以来验证/澄清我的答案。
据我所知,.logic不是原生JavaScript函数或方法,而是将属性作为原型继承的一部分添加到对象中。
这段代码在做什么。
var checkboxes = slice(document.querySelectorAll('.checkbox'));
for (var checkbox of checkboxes)
checkbox.logic = new Checkbox(checkbox);
...is使用.slice函数将自定义html复选框转换为对象对象(这些对象类似于数组,因此它们可以转换为对象)。
简而言之,checkbox.logic类似于....
var checkbox = {logic: "doing stuff with the Checkbox class that was called"};
这不是一个完美的比喻,但我希望这能澄清这一点。
https://stackoverflow.com/questions/38640950
复制相似问题