代码之家  ›  专栏  ›  技术社区  ›  Ooker

一段JS代码需要多次使用不同的值和函数名。如何有效地做到这一点?

  •  0
  • Ooker  · 技术社区  · 2 年前

    我有一个脚本是这样的:

    <div id=“foo”></div> <脚本> var foo; 棒() 函数栏(){ var配置={ a: “foo”, b: “字符串”, otherConfig1:。。。 otherConfig2:。。。 。。。 } foo=新的NeoVis.default(config) foo.render(); console.log(foo); } </脚本>

    我想再有8个这样的片段,使用不同的 foo bar string 其他配置 保持不变。我可以简单地复制它们,但由于 otherConfig 很长,我想做得更聪明。我读过关于 constructor ,但由于函数没有任何参数,我不知道如何应用它。我还试图将 config 对象移到函数之外,但代码似乎无法运行

    Neovis 是一个库。我也在Neovis的Github上问过这个问题: 如何使用不同的初始Cypher查询获得多个div?

    我想要8件不同的 foo , bar string 这个 otherConfig s不变。我可以简单地复制它们,但由于 其他配置 s很长,我想更聪明地做这件事。我读过关于 constructor ,但由于该函数没有任何参数,我不知道如何应用它。我也试着移动 config 对象,但代码似乎无法运行。

    Neovis 是一个图书馆。我还在Neovis的Github上问这个问题: 如何拥有多个具有不同初始Cypher查询的div?

    1 回复  |  直到 2 年前
        1
  •  1
  •   Lajos Arpad    2 年前

    您可以实现一个函数,将 id , func , string 作为参数生成 function 进入 context 你更喜欢(可能 window )。我已经实现了一个假人 NeoVis 为了进行测试,您将需要使用您的。

    var NeoVis = {
        default: function(config) {
            this.render = function() {};
        }
    };
    
    function myfunction(context, id, func, str) {
        context[id] = undefined;
        return context[func] = function() {
            var config = {
                a: id,
                b: str,
                //otherConfigs...
            };
            
            context[id] = new NeoVis.default(config);
            context[id].render();
            console.log(`function ${func} was called and ${id} is the id`);
        };
    }
    
    for (let item of document.querySelectorAll("#foo, #lorem, #dolor")) {
        myfunction(window, item.id, item.getAttribute("data-function"), item.innerText)();
    }
    <div id="foo" data-function="bar">string1</div>
    <div id="lorem" data-function="ipsum">string2</div>
    <div id="dolor" data-function="es">string3</div>

    enter image description here