如何创建一个值是函数的对象?

拉德克

我需要以编程方式创建一个具有一对property的对象:value就像tmpCol["formatter"]=color定义了color的地方一样

var colors = function backgroundColor(cell, formatterParams){}

jsFiddle上一切正常

但是我需要在JavaScript之外即时创建对象。我使用Google Script在其中基于数据创建列标题的定义。我试图var colors = function backgroundColor(cell, formatterParams){}在服务器端定义一个虚拟函数,以便该定义甚至可以通过运行。但是,当我在浏览器中运行页面时,对我来说,函数定义似乎是文本而不是函数。浏览器进行调用,以使用google.script.runGAS返回的定义获取数据

在此处输入图片说明

类型定义 tmpCol["formatter"]=colors;有效,但由GAS处理时则无效

服务器端的html代码看起来像

  <script>
  var colors = function backgroundColor(cell, formatterParams){
    var value = cell.getValue();
    if ("color" in formatterParams) {
      var color = cell.getRow().getData()[formatterParams["color"]];
      if (color){
        cell.getElement().style.backgroundColor = cell.getRow().getData()[formatterParams["color"]];
      }
    }
  return value;
  }
      var initialTableData = [{id:0,name:"nahrávají se data"}];
      var table = new Tabulator("#zz-test", {
          layout:"fitColumns",
          responsiveLayout:"hide",
          data:initialTableData,
          dataTree:true,    
          selectable:true,
          columns:[
            {title:"",
              field:"name",
              headerSort:false,
            },
          ],
      });
google.script.run.withSuccessHandler(updateTable).callLibraryFunction("zzlib.getTabulatorData",'A87J8HRS1');
      
  function updateTable(data){
    table.deleteColumn("name");
    for ( var c = 0; c < data.tableColumns.length; c++){
      table.addColumn(data.tableColumns[c]);
    }
//test
      var tmpCol = {};
    tmpCol["title"]="test 1";
    tmpCol["field"]="test1";
    tmpCol["headerSort"]=false;
    tmpCol["formatter"]=colors;
    tmpCol["formatterParams"]={color:"color1"};    
  
  columns = [
        {title:"", field:"name", width:200},
        tmpCol,
        {title:"Test2", field:"test2", width:200,formatter:colors,formatterParams:{color:"color2"}}
        ];

  //  table.deleteColumn("name");
  //  table.deleteColumn("test1");
  //  table.deleteColumn("test2");

    for ( var c = 0; c < columns.length; c++){
     // table.addColumn(columns[c]);
    }
console.log(columns);
// test
    table.setData(data.tableData); 
  }
    </script>

我需要formatter为两列定义所以到目前为止,我在for循环中尝试了这些。

for ( var c = 0; c < data.tableColumns.length; c++){
  if ("formatter" in data.tableColumns[c]) {
    //console.log(eval(data.tableColumns[c]["formatter"]));
    //data.tableColumns[c]["formatter"]= new Function("return " +   data.tableColumns[c]["formatter"]);
    data.tableColumns[c]["formatter"]= var colors = new Function("return " + data.tableColumns[c]["formatter"]);
    //eval(data.tableColumns[c]["formatter"]);
    //eval("var colors = " + data.tableColumns[c]["formatter"]);
   console.log("eval");
  }
}

知道如何在服务器端创建对象值并将其正确传递给浏览器吗?

扎克

假设您有:

var functionString = "function backgroundColor(cell, formatterParams){}";

您可以使用Function构造函数:#推荐

var colors = new Function("return " + functionString)()

这会将我们的函数解析为一个匿名函数,然后我们return通过调用匿名函数来获取目标函数,最后添加调用()

例:

var functionString = "function backgroundColor(cell, formatterParams){ return 'Hey!'}";

var anonymousFunction = new Function("return " + functionString);
var targetFunction = anonymousFunction();


console.log(anonymousFunction);
console.log(anonymousFunction());

console.log(targetFunction);
console.log(targetFunction());

在这里阅读更多

或者您可以使用eval:#不推荐

eval("var colors = " + functionString);

这将解析并评估您的字符串作为javascript代码

但是,这是一种冒险的方法,请尽量避免使用

在这里阅读更多

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何创建一个值是函数的对象?

来自分类Dev

如何从现有值创建一个新对象?

来自分类Dev

如何根据另一个对象数组的值创建一个对象数组?

来自分类Dev

如何创建一个函数,该函数创建一个不断返回对象键的函数

来自分类Dev

如何创建一个对象创建函数,该函数将由与其关联的名称调用?

来自分类Dev

Javascript对象。如何创建一个在同一对象内调用函数的按钮

来自分类Dev

如何用一串值分解一个对象以创建一个新的对象数组?

来自分类Dev

如何创建一个输出对象列表和对象属性列表的javascript函数?

来自分类Dev

如何创建一个输出对象列表和对象属性列表的javascript函数?

来自分类Dev

创建一个函数以按Javascript中的值对对象数组进行排序

来自分类Dev

如何创建一个函数来评估某个x值的用户输入函数的导数

来自分类Dev

如何创建一个接受两个相同类型的对象,一个属性并比较值的方法

来自分类Dev

如何创建一个包含三个节点元素并设置相同值的对象?

来自分类Dev

如何创建一个在三个向量中打印相同值数量的函数?

来自分类Dev

创建一个函数来接受一个二维数组并返回一个显示所有键:值的对象

来自分类Dev

我如何创建一个函数来检查对象JavaScript数组中的布尔字段

来自分类Dev

如何定义创建前一个对象的默认构造函数

来自分类Dev

如何创建一个可以访问函数及其对象的 JavaScript 包装器?

来自分类Dev

如何创建一个可以在javascript中的对象上调用的函数

来自分类Dev

如何创建一个函数来从嵌套对象中检索所有孩子的 id

来自分类Dev

如何创建一个依赖于另一个变量的任意先前值的虚拟对象?

来自分类Dev

如果有对象被创建为另一个类的数据成员,如何将值传递给参数化的构造函数?

来自分类Dev

如何创建一个键和值都为Enum的EnumMap对象?

来自分类Dev

如何在属性值上创建一个没有双引号的javascript对象

来自分类Dev

如何创建一个使用整数指针并增加其值的“增量”函数?

来自分类Dev

如何创建一个采用整数指针并增加其值的“增量”函数?

来自分类Dev

如何创建一个函数,直到布尔值变为真

来自分类Dev

如何创建一个函数来指定 Python 中的 bin 值

来自分类Dev

如何创建 RxJS Observable 使其在回调函数完成时返回一个值

Related 相关文章

  1. 1

    如何创建一个值是函数的对象?

  2. 2

    如何从现有值创建一个新对象?

  3. 3

    如何根据另一个对象数组的值创建一个对象数组?

  4. 4

    如何创建一个函数,该函数创建一个不断返回对象键的函数

  5. 5

    如何创建一个对象创建函数,该函数将由与其关联的名称调用?

  6. 6

    Javascript对象。如何创建一个在同一对象内调用函数的按钮

  7. 7

    如何用一串值分解一个对象以创建一个新的对象数组?

  8. 8

    如何创建一个输出对象列表和对象属性列表的javascript函数?

  9. 9

    如何创建一个输出对象列表和对象属性列表的javascript函数?

  10. 10

    创建一个函数以按Javascript中的值对对象数组进行排序

  11. 11

    如何创建一个函数来评估某个x值的用户输入函数的导数

  12. 12

    如何创建一个接受两个相同类型的对象,一个属性并比较值的方法

  13. 13

    如何创建一个包含三个节点元素并设置相同值的对象?

  14. 14

    如何创建一个在三个向量中打印相同值数量的函数?

  15. 15

    创建一个函数来接受一个二维数组并返回一个显示所有键:值的对象

  16. 16

    我如何创建一个函数来检查对象JavaScript数组中的布尔字段

  17. 17

    如何定义创建前一个对象的默认构造函数

  18. 18

    如何创建一个可以访问函数及其对象的 JavaScript 包装器?

  19. 19

    如何创建一个可以在javascript中的对象上调用的函数

  20. 20

    如何创建一个函数来从嵌套对象中检索所有孩子的 id

  21. 21

    如何创建一个依赖于另一个变量的任意先前值的虚拟对象?

  22. 22

    如果有对象被创建为另一个类的数据成员,如何将值传递给参数化的构造函数?

  23. 23

    如何创建一个键和值都为Enum的EnumMap对象?

  24. 24

    如何在属性值上创建一个没有双引号的javascript对象

  25. 25

    如何创建一个使用整数指针并增加其值的“增量”函数?

  26. 26

    如何创建一个采用整数指针并增加其值的“增量”函数?

  27. 27

    如何创建一个函数,直到布尔值变为真

  28. 28

    如何创建一个函数来指定 Python 中的 bin 值

  29. 29

    如何创建 RxJS Observable 使其在回调函数完成时返回一个值

热门标签

归档