Malleys,
хватит тролить уже :lol: function logTextNotes(el) { var n, walk = document.createTreeWalker(el, NodeFilter.SHOW_TEXT, null, false); while (n = walk.nextNode()) console.log(n); } logTextNotes(document.body); |
Цитата:
<!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> </head> <body> <div>12345</div> <script> var Y=f=>(g=>x=>f(g(g))(x))(g=>x=>f(g(g))(x)); var processTextNodes = visit => Y(order => node => { if(node != null) node.childNodes.forEach(childNode => childNode.nodeType === Node.TEXT_NODE ? visit(childNode) : order(childNode) ) }); var logTextNotes = processTextNodes(console.log); logTextNotes(document.body); /* https://developer.mozilla.org/ru/docs/Web/API/document/createTreeWalker */ function textNodesLog(el){ const tree = document.createTreeWalker(el,NodeFilter.SHOW_TEXT,null,false); while(tree.nextNode()) console.log(tree.currentNode); } textNodesLog(document.body) </script> </body> </html> |
Poznakomlus,
:) |
ИМХО, Malleys надо бы забанить. Говорить с ним точно нет никакого смысла.
Он либо дурачок, либо тролль, либо всё вместе взятое(Maxmaxmaximus, как твой фреймворк?). P.S. Если кому интересно откуда взялся этот его бессмысленный Y-комбинатор - в рамках js он, как и прочие комбинаторы, просто математическая зарядка для ума, самоочевидно не предназначенная ни для какого практического применения. |
Poznakomlus, рони, да у вас правильное решение, но это не равнозначная замена приведённому коду (в принципе представьте обход любого дерева)
function processTextNodes(node, visit) { if(node == null) return; const stack = []; stack.push(node); while(stack.length !== 0) { node = stack.pop(); if(node.nodeType === Node.TEXT_NODE) visit(node); for(const childNode of node.childNodes) { stack.push(childNode); } } } processTextNodes(document, console.log); Цитата:
Цитата:
Цитата:
|
Цитата:
Вы что-то не так поняли, я как бы не против классической рекурсии. В этой теме я упомянул Y-комбинатор, как одно из возможных решении, поскольку автор темы не указал конкретный код с которым он работает (Может на самом деле можно обойтись без рекурсии вообще!) |
Цитата:
var Y=f=>(g=>x=>f(g(g))(x))(g=>x=>f(g(g))(x)); За такую конструкцию в средние века точно бы на костер поставили =) Цитата:
Цитата:
И здесь |
Y-комбинатор, конечно, прикольный, на собеседовании вполне можно закарать соискателя )
но он втыкает несколько дополнительных вызовов на каждой итерации, что и на скорости может сказаться, и дебажить веселее (нельзя просто взять и зайти внутрь рекурсивного вызова одним нажатием на F11). В общем, вернувшись в реальность, лично я не стал бы его на практике. ---- если у кого "мозги чешутся" повоевать с лямбдами, то велкам: https://www.codewars.com/kata/57c4a3...65b/javascript я пока не решил, там всё не так просто как кажется на первый взгляд ) ничего парсить не надо, на вход уже готовое дерево, только вычислить |
Что-то пробежался по треду одним глазом, но так и не понял зачем это нужно.
Для рекурсии ничего не мешает сделать так: const factorial = function f() { console.log(typeof f); // "function"; } const factorial2 = factorial; console.log(typeof factorial); // "function"; console.log(typeof factorial2); // "function"; console.log(typeof f); // "undefined"; factorial(); factorial2(); А для класса можно просто внутри использовать: this.constructor Например: // ... cloneObject() { return new this.consructor(this.data); } // ... Если Вам действительно нужно как-то получить имя функции, то это просто неправильный подход. И не нужно смотреть на PHP. Все эти магические константы на PHP нужны для отладки, не более. |
Как правильно реализовать такую необходимость без Node:
class Account { constructor(){...} async DB_createAccount() { let response = await fetch('lib/actionsAJAX.php?action='+{имя функции}+'&login='this.login); if (response.ok) { ..... } else { } } } |
Часовой пояс GMT +3, время: 02:57. |