Нужна помощь новичку, помогите плз
Добрый день!
Нужна ваша помощь, бьюсь который день и не могу разобраться... При вводе в консоль : Test().span('Hello').span('World').toString() должно выводиться <span>Hello</span><span>World</span> я ловлю "[object Undefined]" если вытягивать один span, то стоит заменить this на span и один выводится, а 2 не хотят. Хочу разобраться с этим что бы и 1 выводился и 2 спан. Если получится то хочу так и другие теги подтягивать function Test() { let tags = { span(tagSpan) { span = document.createElement('span').innerHTML = `<span>${getFullName()}</span>` function getFullName() { return tagSpan + ""; } return this; }, toString(){ return toString(); } }; return tags } // Test().span('Hello').span('World').toString() const Test1 = Test() |
Lexx,
<body> <script> function Test() { let str = ''; let tags = { span(tagSpan) { str += `<span>${getFullName()}</span>` function getFullName() { return tagSpan + "!!!"; } return this; }, toString() { return str; } }; return tags }; document.body.append(Test().span('Hello').span('World').toString()); </script> </body> |
Правильно ли я понял
Мне не хватало объявленной переменной и в случае когда мне надо завершить цикл все сбрасывается в нее |
Lexx, давайте разберём. Просто опишите свою логику, почему оно должно работать.
Что, по вашему мнению, должна делать вот эта строчка?: span = document.createElement('span').innerHTML = `<span>${getFullName()}</span>`В реальности тут создаётся глобальная переменная span в которую кладётся строка `<span>${getFullName()}</span>`, также создаётся элемент span, внутрь которого кладётся другой span, внутрь которого кладётся возврат getFullName(). После чего это нигде и никак не используются, созданный элемент удаляется сборщиком мусора, а глобальная переменная со строкой остаётся бесполезно висеть. Что, по вашему мнению, должна делать вот эта строчка?: return toString();В реальности тут вызывается toString() глобального объекта(window) без контекста(в контексте undefined). Никакого отношения к твоему объекту этот вызов не имеет. |
Aetae,
:thanks: |
Aetae, рони
Большое спасибо, document.createElement('span').innerHTML в span был мусором от эксперементов Еще раз большое спасибо за помощь и низкий поклон :thanks: |
Цитата:
Прошу сильно не ругать, я только 2ю неделю разбираюсь с JS |
Можно еще вопрос?
Поскольку у нас Span является строкой, как теперь в него засунуть ID и CLASS Test().span('Text...', { id: "spanBlue", class: "blueSpan" }).toString() |
Lexx, если тебе это надо чтоб научиться - ты должен разобраться с такими вещами сам, иначе толку не будет. Если тебе это надо для дела - используй хотя-бы тот же jquery или одну из 100500 других либ, умеющих примерно также.
span(tagSpan, attrs) { attrs = Object .entries(attrs || {}) .map(([key, val]) => `${key}="${val}"`) .join(' '); str += `<span ${attrs}>${getFullName()}</span>` |
Aetae, спасибо
Да, я учусь, разбираюсь во всем сам, но иногда утыкаюсь во что-то, на что даже не могу сформулировать запрос в поисковик :) Но мне бы, наверное, даже хватило бы просто объяснения куда копать. |
Часовой пояс GMT +3, время: 11:15. |