двойной подход к целевой функции и элементам в моей проблеме с js lib - PullRequest
0 голосов
/ 23 октября 2018

Я создаю свою маленькую библиотеку lib js.

Мое намерение состоит в том, чтобы обе эти возможности были такими:

//this:

core.find(".myclass").myAction (actor);

var target = core.target (".myclassname");
core.myAction (target, actor);

//or:

core.find(".myclass").myAction (actor);

var target = core.find(".myclassname");
core.myAction (target, actor);

//so, return the finded for core and gearcore, but
//I can not and I do not think it's feasible (is it?)


//this isn't a good solution... thanks.
//var target = core.find(".myclassname");
//target .myAction (target, actor);

в любом случае ... первая цепочка, вторая частьиз первого класса и генерирует действие через параметр.

да, я уже знаю, что могу создать копию функций, но это отвратительно ... и скопировать цель, как я могу ее решить?

здесь речь идет о соединении двух "находок" или о размещении двух возвратов, или о соединении двух возвратов, или о чем-то еще, или о чем-то подобном.

для удобства: lib в jsfiddle еще ...

LIB: примечание 1: две функции eval - это всего лишь демонстрация для получения ответа.полная библиотека содержит больше, и мне нужно назначить цель обоими способами

    class coregears {

    constructor(gear) {
        this.gear = gear;
    }

    actor(target, fname) {
        alert("inside actor");
        let t_, f_;
        (1 == arguments.length) ? (t_ = this.gear, f_ = target) : (t_ = target, f_ = fname);
        t_.forEach((looped) => {  eval(f_)(looped); return this.gear});
    }

}
class Core {


    // return for core.function(target,actor);
    target(subject)
    {

        let name;
        var finded;

        if (subject.startsWith(".")) {
            name = subject.split(".")[1];
            finded = [...document.getElementsByClassName(name)];
        }
        if (subject.match(/\B\#\w\w+\b/g)) {
            name = subject.replace(/#(\S*)/g, 'ID_$1').split("ID_")[1];
            finded = [...document.querySelectorAll("#" + name)];
        }
        if (subject.startsWith("[")) {
            finded = [...document.querySelectorAll(subject)];
        }

        return finded;

    }

        // return for core.find(target).function(actor);
    find(subject){
        let name;

        if (subject.startsWith(".")) {
            name = subject.split(".")[1];
            find = [...document.getElementsByClassName(name)];
        }
        if (subject.match(/\B\#\w\w+\b/g)) {
            name = subject.replace(/#(\S*)/g, 'ID_$1').split("ID_")[1];
            find = [...document.querySelectorAll("#" + name)];
        }
        if (subject.startsWith("[")) {
            find = [...document.querySelectorAll(subject)];
        }
        return new coregears(find);
    } 

}
const core = new Core();

СЦЕНАРИЙ:

  //chain
  core.find(".test_Y").actor(myactor_1);
  function myactor_1(looped) {
      alert("actor_1");
      looped.style = "font-weight: bold; color: magenta;";
  };


  //direct
  var mytarget = core.target(".test_X");
  core.actor(mytarget,myactor_2);
  function myactor_2(looped) {
      alert("actor_2");
      looped.style = "font-weight: bold; color: green;";
  };

HTML:

  <div class="test_X">SIMPLE TEST CLASS</div>
  <div class="test_X">SIMPLE TEST CLASS</div>
  <div class="test_X">SIMPLE TEST CLASS</div>
  <div class="test_Y">SIMPLE TEST CLASS</div>
  <div class="test_Y">SIMPLE TEST CLASS</div>
  <div class="test_Y">SIMPLE TEST CLASS</div>

Идея?

обновление: я заменил eval на f_.call (этот, зацикленный);спасибо @ Шилли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...