Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Селектор элементов для библиотеки (https://javascript.ru/forum/misc/65445-selektor-ehlementov-dlya-biblioteki.html)

NO_ONE 19.10.2016 15:42

Селектор элементов для библиотеки
 
Здравствуйте.

Пишу небольшую библиотеку, включающую собственные функции. Сделал её по примеру lodash.

Возникла потребность написать простенький селектор для элементов по типу "доллара" в jQuery. Сейчас остановился на такой конструкции:
(function() {
  "use strict";

  function myLib(id) { // берет элемент как _("id")
    return document.getElementById(id);
  };

  function funcOne() {}
  function funcTwo() {}

  myLib.funcOne = funcOne;
  myLib.funcTwo = funcTwo;

  window._ = myLib;

}());


А как реализовать для публичного использования методы для этого селектора? Например, _("id").hide() или _("id").text().

Пробовал так:
(function() {
  "use strict";

  function myLib(id) { // берет элемент как _("id")
    return document.getElementById(id);
  };

  myLib.prototype.hide = function { // но как это преобразовать в _("id").hide()?
  }

  function funcOne() {}
  function funcTwo() {}

  myLib.funcOne = funcOne;
  myLib.funcTwo = funcTwo;

  window._ = myLib;

}());


Посмотрел исходник lodash - слишком тяжело и много кода, не разобрался.
Буду благодарен за объяснение и прошу прощения за столь тривиальные вопросы.

рони 19.10.2016 16:44

NO_ONE,
http://forwebdev.ru/javascript/chaining/

NO_ONE 20.10.2016 15:02

Спасибо, прочитал. Сделал следующее:
function myLib(el) { // _("mydiv")
    this.el = el;
    return document.getElementById(el);
  }

  myLib.prototype = {
    text: function() {
      return this.textContent;
    },
    html: function() {
      return this.innerHTML;
    }
  };


Но возникло два вопроса:
1. Из-за "use strict" (как я понял) this.el = el; не хочет работать. Как это исправить?
2. Я всё также не могу вызвать _("mydiv").text()...

Буду благодарен, если чуть подробнее объясните. Нашел уже примеры такой реалиции: 1, 2. Но ни один так и не смог адаптировать под свой код.

Vlasenko Fedor 20.10.2016 17:30

function MyLib() {
    var self = this instanceof MyLib
        ? this
        : Object.create(MyLib.prototype);
    if (1 === arguments.length) {
        self.me.apply(self, arguments);
    }
    if (2 === arguments.length) {
        self.my.apply(self, arguments);
    }
    return self;
}
MyLib.prototype = {
    me: function (a) {
        console.log(a);
    },
    my: function (a, b) {
        console.log(a, b);
    },
    test: function () {
        console.log('test');
    }
};
var a = MyLib('arg1');
var b = MyLib('arg1', 'arg2');
a.test();
:) можно так попробовать

Rise 21.10.2016 16:39

jQuery style JavaScript library (chaining, prototyping, addoning)
 
Небольшая JavaScript библиотека в jQuery стиле включающая собственные функции

Перенесено сюда.

NO_ONE, дерзай...


Часовой пояс GMT +3, время: 05:52.