Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.09.2021, 17:48
Интересующийся
Отправить личное сообщение для Lexx Посмотреть профиль Найти все сообщения от Lexx
 
Регистрация: 06.09.2021
Сообщений: 10

Нужна помощь новичку, помогите плз
Добрый день!
Нужна ваша помощь, бьюсь который день и не могу разобраться...
При вводе в консоль : 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()
Ответить с цитированием
  #2 (permalink)  
Старый 06.09.2021, 18:07
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

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>

Последний раз редактировалось рони, 06.09.2021 в 18:10.
Ответить с цитированием
  #3 (permalink)  
Старый 07.09.2021, 08:51
Интересующийся
Отправить личное сообщение для Lexx Посмотреть профиль Найти все сообщения от Lexx
 
Регистрация: 06.09.2021
Сообщений: 10

Правильно ли я понял
Мне не хватало объявленной переменной и в случае когда мне надо завершить цикл все сбрасывается в нее
Ответить с цитированием
  #4 (permalink)  
Старый 07.09.2021, 09:11
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,491

Lexx, давайте разберём. Просто опишите свою логику, почему оно должно работать.

Что, по вашему мнению, должна делать вот эта строчка?:
span = document.createElement('span').innerHTML = `<span>${getFullName()}</span>`
В реальности тут создаётся глобальная переменная span в которую кладётся строка `<span>${getFullName()}</span>`, также создаётся элемент span, внутрь которого кладётся другой span, внутрь которого кладётся возврат getFullName(). После чего это нигде и никак не используются, созданный элемент удаляется сборщиком мусора, а глобальная переменная со строкой остаётся бесполезно висеть.


Что, по вашему мнению, должна делать вот эта строчка?:
return toString();
В реальности тут вызывается toString() глобального объекта(window) без контекста(в контексте undefined). Никакого отношения к твоему объекту этот вызов не имеет.
__________________
29375, 35
Ответить с цитированием
  #5 (permalink)  
Старый 07.09.2021, 09:30
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Aetae,
Ответить с цитированием
  #6 (permalink)  
Старый 07.09.2021, 09:47
Интересующийся
Отправить личное сообщение для Lexx Посмотреть профиль Найти все сообщения от Lexx
 
Регистрация: 06.09.2021
Сообщений: 10

Aetae, рони
Большое спасибо, document.createElement('span').innerHTML в span был мусором от эксперементов

Еще раз большое спасибо за помощь и низкий поклон

Последний раз редактировалось Lexx, 07.09.2021 в 10:14.
Ответить с цитированием
  #7 (permalink)  
Старый 07.09.2021, 09:48
Интересующийся
Отправить личное сообщение для Lexx Посмотреть профиль Найти все сообщения от Lexx
 
Регистрация: 06.09.2021
Сообщений: 10

Цитата:
Что, по вашему мнению, должна делать вот эта строчка?:
return toString();
Она должны была быть замыкающей, как сделал её Рони, я не мог допетрить как замкнуть.
Прошу сильно не ругать, я только 2ю неделю разбираюсь с JS

Последний раз редактировалось Lexx, 07.09.2021 в 09:51.
Ответить с цитированием
  #8 (permalink)  
Старый 07.09.2021, 11:14
Интересующийся
Отправить личное сообщение для Lexx Посмотреть профиль Найти все сообщения от Lexx
 
Регистрация: 06.09.2021
Сообщений: 10

Можно еще вопрос?
Поскольку у нас Span является строкой, как теперь в него засунуть ID и CLASS
Test().span('Text...', { id: "spanBlue", class: "blueSpan" }).toString()
Ответить с цитированием
  #9 (permalink)  
Старый 07.09.2021, 13:41
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,491

Lexx, если тебе это надо чтоб научиться - ты должен разобраться с такими вещами сам, иначе толку не будет. Если тебе это надо для дела - используй хотя-бы тот же jquery или одну из 100500 других либ, умеющих примерно также.
span(tagSpan, attrs) {
  attrs = Object
    .entries(attrs || {})
    .map(([key, val]) => `${key}="${val}"`)
    .join(' ');
  str += `<span ${attrs}>${getFullName()}</span>`
__________________
29375, 35
Ответить с цитированием
  #10 (permalink)  
Старый 07.09.2021, 14:13
Интересующийся
Отправить личное сообщение для Lexx Посмотреть профиль Найти все сообщения от Lexx
 
Регистрация: 06.09.2021
Сообщений: 10

Aetae, спасибо
Да, я учусь, разбираюсь во всем сам, но иногда утыкаюсь во что-то, на что даже не могу сформулировать запрос в поисковик Но мне бы, наверное, даже хватило бы просто объяснения куда копать.
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна помощь с Массивами и функциями Mikekrd Элементы интерфейса 0 23.02.2016 10:20
Помогите нужна помощь срочно mahes1234 Общие вопросы Javascript 0 11.01.2016 23:57
Нужна помощь по слайдеру seoguru Работа 3 28.01.2013 22:02
Помогите новичку плиз!!!!!!!!!!!!! Юрий Манылов Общие вопросы Javascript 1 18.12.2012 11:37
Нужна помощь. Artem88 Общие вопросы Javascript 0 13.12.2012 22:22