Как JS Libs выполняют действия с переменными в цепочке или по отдельности?

Как я могу создать свои собственные части или функции библиотеки JS, как в приведенных ниже примерах?

Как мне взять переменную и добавить к ней что-то вроде этого:


let x = document.createElement("p");

x.pickle(); 

//let's say ".pickle" turns the text green. I do not want to use a normal function to do this like `setAtrribute` I want to do it through my own custom thing like ".pickle"

let x = new Something().color("green");

//How Can I create a new addition or something like libraries? Potentially Chainable Methods.

Как мне сделать это, как это делают библиотеки JS? Даже если мой пример нужно изменить, чтобы он заработал.

Вы хотите добавить функцию «добавить» в x?

evolutionxbox 16.08.2024 21:30

@evolutionxbox — это не пользовательская функция, позволяющая делать все, что я захочу. Извини

Westberg Personal 16.08.2024 21:31

@evolutionxbox Да, скажем так, да

Westberg Personal 16.08.2024 21:32

@evolutionxbox Как мне его создать? Я просто пытаюсь создать небольшую библиотеку, и мне нужна вот эта вещь. Кроме того, я отредактировал свой экзамен для лучшего понимания.

Westberg Personal 16.08.2024 21:48

Мы не разрешаем менять вопрос после того, как вы уже получили ответы.

gre_gor 16.08.2024 22:08

@gre_gor, братан, чтобы повысить ценность? лол окей

Westberg Personal 16.08.2024 22:10

Аннулирование существующих ответов не добавляет ценности.

gre_gor 16.08.2024 22:11

Этот вопрос похож на: Методы последовательного подключения в JavaScript. Если вы считаете, что это другое, отредактируйте вопрос, поясните, чем он отличается и/или как ответы на этот вопрос не помогают решить вашу проблему.

gre_gor 16.08.2024 22:22

@gre_gor на самом деле это другая терминология. Основным ответом был тот, кто опубликовал сообщение, этот вопрос не решает проблему.

Westberg Personal 16.08.2024 22:27

Вы аннулировали принятый ответ.

gre_gor 16.08.2024 22:46
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
10
51
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Есть свойство textContent, которое вы можете получить и установить.

JavaScript также позволяет добавлять элементы к любому объекту. Таким образом, вы можете создать нового члена под названием «добавить» с желаемым поведением.

Теоретически вы даже можете использовать .prototype, чтобы все объекты данного типа имели новое поведение.

Однако добавление свойств к объектам, которыми ваш код не «владеет», обычно не является хорошей идеей. Обычно лучше создать собственную функцию/объект/класс со своим собственным поведением, которое можно использовать для изменения значений других объектов. Вот почему такие библиотеки, как Prototype.js, вышли из моды и были заменены jQuery (до того, как фреймворки SPA захватили мир).

const div = document.querySelector(".example");

div.textContent += " | New Text";

div.add = (moreText) => div.textContent += " | " + moreText;

div.add("hi");
div.add("there");

HTMLElement.prototype.pickle = function() { this.textContent += "| I'm a pickle" };
div.pickle();
<div class = "example">Original Text</div>

вы видите часть «.textContent». Как я могу сделать все, что захочу, скажем «.pickle», который сделает текст зеленым. Плохой пример, я изменюсь

Westberg Personal 16.08.2024 21:42

@WestbergPersonal Почему ты хочешь измениться .textContent?

evolutionxbox 16.08.2024 21:50

Спасибо, а есть возможность добавить еще более сложные функции или нет?

Westberg Personal 16.08.2024 21:51

@evolutionxbox Я изменил свой пример, чтобы посмотреть, имеет ли он больше смысла, но мой первоначальный пример, от которого этот парень отказался. Теперь мне интересно, стоит ли усложняться и делать больше, чем одно дело.

Westberg Personal 16.08.2024 21:52

@WestbergPersonal: функция есть функция. Вы можете сделать его настолько сложным, насколько захотите. Но, пожалуйста, обратите внимание на мое предупреждение. Что бы вы ни пытались с этим сделать, вы, вероятно, используете неправильный подход.

StriplingWarrior 16.08.2024 21:53

@StriplingWarrior Я создаю простую в использовании библиотеку и в моем случае хочу иметь возможность просто использовать «.something», чтобы пользователю было проще. Я привел самый простой пример, чтобы попытаться найти ответ.

Westberg Personal 16.08.2024 21:56

@WestbergPersonal Итак, вы создаете что-то вроде jQuery?

Barmar 16.08.2024 22:26

@Barmar Ха-ха, нет, я создаю библиотеку для удобной демонстрации веб-сайтов, например, React и jQuery, но с гораздо большим количеством данных, серверных бэкэндов и прочего. Так что да, но нет, совсем нет.

Westberg Personal 16.08.2024 22:29

Похоже, вы хотите иметь свой собственный класс с методами, которые устанавливают атрибуты, свойства, CSS и т. д. элемента DOM. Вы могли бы также поручить этому классу создать элемент DOM и сделать методы цепочками.

Может быть, что-то вроде этого:

// Custom class that has methods that allow chaining.
class Element {
    constructor(type) {
        this.elem = document.createElement(type);
    }
    text(text) {
        if (arguments.length) {
            this.elem.textContent = text; // set
            return this; // <-- make chainable
        } else {
            return this.elem.textContent; // get
        }
    }
    append(...elems) {
        this.elem.append(...elems.map(obj => obj.elem));
        return this;
    }
    attr(name, value) {
        if (arguments.length) {
            this.elem.setAttribute(name, value); // set
            return this;
        } else {
            return this.elem.getAttribute(name); // get
        }
    }
    css(obj) {
        Object.assign(this.elem.style, obj);
        return this;
    }
    appendTo(target) {
        document.querySelector(target).append(this.elem);
        return this;
    }
    // ...add more methods...
    static find(selector) {
        const instance = Object.create(Element.prototype);
        instance.elem = document.querySelector(selector);
        return instance;
    }
}

// Example use
const div = new Element("div").text("hello").css({background: "yellow"}).appendTo("body");
console.info(`the div has '${div.text()}' as text`);
const find = Element.find("div"); // Can I get it?
console.info(`found div. '${find.text()}'`);

Спасибо, это тоже помогает с моей библиотекой.

Westberg Personal 16.08.2024 22:11

Знаете ли вы jQuery? Он делает что-то подобное, и было бы жаль, если бы вы просто изобретали велосипед.

trincot 16.08.2024 22:14

Ха-ха, нет, я создаю библиотеку для удобной демонстрации веб-сайтов, например React и jQuery, но с гораздо большим количеством данных, серверными бэкэндами и прочим. Так что да, но нет, совсем нет

Westberg Personal 16.08.2024 22:30

Знаете ли вы, что jQuery имеет простую систему плагинов? Вы можете просто добавить все функции, которые хотите добавить, поверх того, что предлагает jQuery «из коробки».

trincot 16.08.2024 22:32

То, как jQuery представляет это, теперь так, как я хочу, мне нравится, как React работает с DOM-манипуляциями, поэтому я использую его для такого рода использования. Мне нравятся данные jQuery, и они работают, но из-за того, что у меня их много, они просто не работают так, как нужно мне и моим клиентам. Три года назад я действительно хорошо разбирался в JS, пока не сделал перерыв, и сейчас я ничего не понимаю в некоторых вещах.

Westberg Personal 16.08.2024 22:34

React — отличный фреймворк. Обратите внимание, что с React вы никогда этого не сделаете x = document.createElement("p")

trincot 16.08.2024 22:39

Я поддерживаю совет Тринкота — использовать библиотеки, которые уже предназначены для подобных задач. Будет проще использовать jQuery и добавлять свои данные и серверную логику, чем писать все это самостоятельно.

StriplingWarrior 16.08.2024 23:40

Другие вопросы по теме