Я слежу за оптимизацией и простым интеллектуальным ответом.
В javascript и в большинстве случаев вы говорите о цикле for.
Если найдешь в инете. Вы можете видеть, что многие люди говорят, что код менее эффективен
for(var i = 0; i < arr.length; i++) {
}
чем
var len = arr.length;
for(var i = 0; i < len; i++) {
}
Тогда я подумал об этом. Кажется уместным сказать это, потому что, если вы просто читаете код, вы будете говорить в первом коде каждый раз, когда вы заходите в цикл, вы хотите получить длину.
Поэтому я хотел бы ответить на это чем-нибудь практичным.
Если вы узнаете о javascript, все является объектом, поэтому вы «можете» использовать сеттер и получатель?
так что я пробую это
<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "UTF-8">
<meta name = "viewport" content = "width=device-width, initial-scale=1.0">
<meta http-equiv = "X-UA-Compatible" content = "ie=edge">
<title>Document</title>
</head>
<body>
<h1 class = "abc">Hello</h1>
<h1 class = "abc">Hello</h1>
<h1 class = "abc">Hello</h1>
<h1 class = "abc">Hello</h1>
<h1 class = "abc">Hello</h1>
<h1 class = "abc">Hello</h1>
<h1 class = "abc">Hello</h1>
<h1 class = "abc">Hello</h1>
<h1 class = "abc">Hello</h1>
<h1 class = "abc">Hello</h1>
<h1 class = "abc">Hello</h1>
<h1 class = "abc">Hello</h1>
<h1 class = "abc">Hello</h1>
<script>
var eles=document.getElementsByClassName('abc');
var tmp = eles.prototype.length;
Object.defineProperty(eles, 'length', {
get: function(e) {
console.info("je suis la", this);
return tmp.call(this);
}
})
var len = eles.length;
// for(i=0; i < eles.length;i++){
// }
</script>
</body>
</html>
Но проблема, которую я обнаружил здесь, в банкомате, заключается в том, что я нахожусь в бесконечном цикле.
«вы найдете в Интернете много людей, говорящих»… много всего. И многие из них устарели. Разместите ссылки там, где вы их нашли.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Сначала на инстансе нет прототипа:
var tmp = eles.prototype.length;
prototype не существует на eles, а length не существует на прототипе, он существует только на самом экземпляре. И вы не можете получить ссылку на базовый геттер / сеттер, поскольку они полностью прозрачны. Однако вы могли:
var number = eles.length;
А затем внутри геттера просто верните это число:
return tmp;
Но это все равно плохо по трем причинам:
1) NodeLists являются динамическими, поэтому длина может меняться между ними, что приведет к превышению диапазона, а неожиданные ошибки - это плохо.
2) Вы убиваете каждую оптимизацию встраивания, которую раньше делал бы любой серьезный движок js. В большинстве браузеров for(const el of array) на самом деле намного быстрее, чем возиться с индексами.
3) Он ничего не меняет, так как поиск свойств выполняется медленно, а не сам получатель.
Я пытаюсь переформулировать то, что вы говорите. -1 думаю о статическом нодлисте. -2 меня устраивают индексы, но нет - 3 я согласен с геттером. Я хочу доказать, что длина вычисляется один раз в каждом цикле? даже если вы воспользуетесь 1-м или 2-м действием? И я не знаю, как это продемонстрировать
и проблема того, что вы представляете, не работает в IE
"простой интеллектуальный ответ" ???