07.02.2020, 00:50
|
|
Профессор
|
|
Регистрация: 13.03.2013
Сообщений: 1,572
|
|
Malleys,
хватит тролить уже
function logTextNotes(el) {
var n, walk = document.createTreeWalker(el, NodeFilter.SHOW_TEXT, null, false);
while (n = walk.nextNode()) console.log(n);
}
logTextNotes(document.body);
|
|
07.02.2020, 00:58
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
Сообщение от Malleys
|
Обход всех текстовых узлов в DOM
|
<!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>
|
|
07.02.2020, 01:00
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
Poznakomlus,
|
|
07.02.2020, 01:15
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,584
|
|
ИМХО, Malleys надо бы забанить. Говорить с ним точно нет никакого смысла.
Он либо дурачок, либо тролль, либо всё вместе взятое(Maxmaxmaximus, как твой фреймворк?).
P.S. Если кому интересно откуда взялся этот его бессмысленный Y-комбинатор - в рамках js он, как и прочие комбинаторы, просто математическая зарядка для ума, самоочевидно не предназначенная ни для какого практического применения.
__________________
29375, 35
Последний раз редактировалось Aetae, 07.02.2020 в 01:33.
|
|
07.02.2020, 01:41
|
|
Профессор
|
|
Регистрация: 20.12.2009
Сообщений: 1,714
|
|
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);
Сообщение от Aetae
|
ИМХО, Malleys надо бы забанить
|
Всё это походит на сжигание людей в средние века. На тюремные заключения в современном РФ. Что именно я сделал не так?
Сообщение от Aetae
|
Говорить с ним точно нет никакого смысла.
|
Я вас ни к чему не принуждаю, я прочитал вашу точку зрения насчёт не стрелочных функции, считаю ОК. А вы разве что-то у меня спрашивали?
Сообщение от Aetae
|
Он либо дурачок, либо тролль, либо всё вместе взятое
|
Проблемы?
|
|
07.02.2020, 01:57
|
|
Профессор
|
|
Регистрация: 20.12.2009
Сообщений: 1,714
|
|
Сообщение от Aetae
|
Если кому интересно откуда взялся этот его бессмысленный Y-комбинатор - в рамках js он, как и прочие комбинаторы, просто математическая зарядка для ума, самоочевидно не предназначенная ни для какого практического применения.
|
Хватит вводить людей в заблуждение! Оно прекрасно работает как замена классической рекурсии, о которой вы упоминали.
Вы что-то не так поняли, я как бы не против классической рекурсии.
В этой теме я упомянул Y-комбинатор, как одно из возможных решении, поскольку автор темы не указал конкретный код с которым он работает (Может на самом деле можно обойтись без рекурсии вообще!)
|
|
07.02.2020, 09:02
|
|
Интересующийся
|
|
Регистрация: 16.11.2015
Сообщений: 14
|
|
Сообщение от Malleys
|
Обход всех текстовых узлов в DOM
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);
|
var Y=f=>(g=>x=>f(g(g))(x))(g=>x=>f(g(g))(x));
За такую конструкцию в средние века точно бы на костер поставили =)
Сообщение от Poznakomlus
|
Код должен быть простым и понятым
|
Сообщение от Aetae
|
P.S. Если кому интересно откуда взялся этот его бессмысленный Y-комбинатор - в рамках js он, как и прочие комбинаторы, просто математическая зарядка для ума, самоочевидно не предназначенная ни для какого практического применения.
|
Вот здесь немного есть
И здесь
|
|
07.02.2020, 09:29
|
|
Профессор
|
|
Регистрация: 25.10.2016
Сообщений: 1,012
|
|
Y-комбинатор, конечно, прикольный, на собеседовании вполне можно закарать соискателя )
но он втыкает несколько дополнительных вызовов на каждой итерации, что и на скорости может сказаться, и дебажить веселее (нельзя просто взять и зайти внутрь рекурсивного вызова одним нажатием на F11). В общем, вернувшись в реальность, лично я не стал бы его на практике.
----
если у кого "мозги чешутся" повоевать с лямбдами, то велкам:
https://www.codewars.com/kata/57c4a3...65b/javascript
я пока не решил, там всё не так просто как кажется на первый взгляд )
ничего парсить не надо, на вход уже готовое дерево, только вычислить
Последний раз редактировалось Alexandroppolus, 07.02.2020 в 09:51.
|
|
07.02.2020, 13:15
|
|
Профессор
|
|
Регистрация: 30.04.2012
Сообщений: 3,018
|
|
Что-то пробежался по треду одним глазом, но так и не понял зачем это нужно.
Для рекурсии ничего не мешает сделать так:
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 нужны для отладки, не более.
|
|
12.02.2020, 22:48
|
|
Интересующийся
|
|
Регистрация: 16.11.2015
Сообщений: 14
|
|
Как правильно реализовать такую необходимость без Node:
class Account
{
constructor(){...}
async DB_createAccount()
{
let response = await fetch('lib/actionsAJAX.php?action='+{имя функции}+'&login='this.login);
if (response.ok)
{
.....
}
else
{
}
}
}
|
|
|
|