如何将字符串转换为带有属性和函数引用的Javascript对象?

时间:2018-10-16 05:43:23

标签: javascript angularjs typescript

我想产生一个Javascript对象,其中包含类型函数(myClickHandler示例)的属性(onClick示例),

var options = {onClick: this.myClickHandler};

我希望从字符串创建上述对象,因为每次应用程序运行时options对象都可能不同,并且希望在运行时对其进行评估。 (myClickHandler是现有功能)。我想要从字符串创建的options对象,因为onClick属性可以是其他东西,而其功能也可以是其他东西。这些是从动态字符串确定的。

正在寻找这样的东西:

var optionsString = "{onClick: this.myClickHandler}";  
var options = JSON.parse(optionsString); //won't work. For illustration only.

这自然不会起作用。理想情况下,我想一次性转换字符串,但可能需要解析它,但optionString可以包含一个或多个属性。

2 个答案:

答案 0 :(得分:0)

尝试将eval用作:

var myClickHandler = function(){ alert('i am evil'); };
var options = JSON.parse('{ "onClick": "this.myClickHandler" }');

//现在调用处理程序

eval(options.onClick)();

答案 1 :(得分:0)

您需要在某些上下文中绑定函数,以便可以通过键(可以是字符串)访问该函数。

let context = {};

context.myclickhandler = () => {
	console.log("### It clix ####")
}

let nameOfFunction = "myclickhandler"
let obj = {"onClick" : context[nameOfFunction]};
obj["onClick"]();

在该示例中,上下文只是一个对象,但也可以是Windows对象或构造函数的实例。