从构造函数创建一个匿名函数对象,并将其存储在另一个对象中

Create an anonymous function object from a constructor and store it in another object

本文关键字:存储 一个对象 对象 函数 创建 构造函数 一个      更新时间:2023-09-26

我将以下函数存储在JSON数据中:

function (e) { e.preventDefault();var caro=$(e.target).parents('.carousel');curr=$(caro).parents('.grid-stack-item');currInt=$(curr).find('.carousel-indicators li.active').data('slide-to');$(curr).find('.carousel-indicators li.active').removeClass('active');currInt+=1;var currLi=$(curr).find('.carousel-indicators li')[currInt];$(currLi).addClass('active');$(caro).carousel(1);$(caro).carousel('pause');var tr=$(e.target).closest('tr');data=this.dataItem(tr);wizard(1,$(e.target).parents('.grid-stack-item'),data); }

我正在使用一个外部库,它要求JSON字符串中的函数作为JS函数附加到对象属性。

从字面上看,代码是这样的:
grid({
    click: data.functionData
)};

我的问题是数据。functionData被评估为一个字符串,当click事件在网格对象上执行时,结果是一个错误,因为数据应该是一个函数而不是字符串。

我需要做的是创建一个匿名函数…

var anonFun = new Function();

并将事件作为参数....

function (e) { }

然后将其附加到网格中的click事件…

grid({ click: function (e) { //dostuff } });

我接近完成这一点,但我现在的问题是我不知道如何给一个匿名函数创建一个函数构造器参数'e'。

给出当前状态,我的代码是…

var jsonData = "function (e) { e.preventDefault();var caro=$(e.target).parents('.carousel');curr=$(caro).parents('.grid-stack-item');currInt=$(curr).find('.carousel-indicators li.active').data('slide-to');$(curr).find('.carousel-indicators li.active').removeClass('active');currInt+=1;var currLi=$(curr).find('.carousel-indicators li')[currInt];$(currLi).addClass('active');$(caro).carousel(1);$(caro).carousel('pause');var tr=$(e.target).closest('tr');data=this.dataItem(tr);wizard(1,$(e.target).parents('.grid-stack-item'),data); }";
var anonFunc = new Function(jsonData);
grid({ click: anonFunc )};

我想我需要这样做:

var anonFunc = new Function(e, jsonData);

并将jsonData更改为仅为函数的内部内容

当时不能理解它,但是通过剥离我的JSON数据仅作为函数内容,我能够使用函数构造器创建一个函数对象并将其附加到我的单击事件处理程序。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function

var anonFunc = new Function('e', data.functionContentsData);
grid({ click: anonFun )};