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

时间:2016-11-07 16:56:14

标签: javascript json

我将以下函数存储在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
)};

我遇到的问题是data.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改为仅仅是函数的内部内容。

1 个答案:

答案 0 :(得分:0)

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

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

var anonFunc = new Function('e', data.functionContentsData);

grid({ click: anonFun )};