传递“ this”有麻烦

时间:2018-10-30 16:11:37

标签: javascript object

对不起,标题很抱歉,我真的不知道该如何提出我的问题。

下面的代码只是我为自动完成与游戏的click事件配对的按钮的生成而做的一小部分。 我正打算将modal.load()函数(以关联数组作为参数)作为字符串传递给"Look"按钮。好吧,函数传递可以正常工作(不在提供的代码中),但是

如您所见,actions[0].script的每个属性都返回undefined,好像没有传递this

如果您需要其他任何内容来理解代码,请告诉我。

actions = [{
    name: "Look",
    modal_color: 'salmon',
    modal_img: '',
    modal_title: 'This is a title',
    modal_text: 'This is text',
    script: `modal.load({'img': '${this.modal_img}', 'color': '${this.modal_color}', 'title': '${this.modal_color}', 'txt': '${this.modal_text}'});`,
  },
  {
    name: "Walk",
    script: "console.info('Other type of script')"
  }
]

console.log(actions[0].script)

编辑:为清晰起见,模板字符串

3 个答案:

答案 0 :(得分:3)

“此”仅在功能范围内起作用,而不在对象范围内起作用

actions = [{
name: "Look",
modal_color: 'salmon',
modal_img: '',
modal_title: 'This is a title',
modal_text: 'This is text',
script: function(){
    return `modal.load({'img': '${this.modal_img}', 'color': '${this.modal_color}', 'title': '${this.modal_color}', 'txt': '${this.modal_text}'});`;

}},
{
    name: "Walk",
    script: "console.info('Other type of script')"
}
]

console.log(actions[0].script())

答案 1 :(得分:2)

在创建对象之后对数组进行迭代对您有用吗?

例如,

	actions = [{
		name: "Look",
		modal_color: 'salmon',
		modal_img: '',
		modal_title: 'This is a title',
		modal_text: 'This is text'
	  },
	  {
		name: "Walk",
		script: "console.info('Other type of script')"
	  }
	];

	actions.forEach( (e) => { e.script = "modal.load({'img': '" + e.modal_img + "', 'color': '" + e.modal_color + "', 'title': '" + e.modal_color + "', 'txt': '" + e.modal_text + "'});" });

	console.log(actions[0].script);

答案 2 :(得分:0)

谢谢大家,我终于决定重新编写所有相应的代码,以使事情不会太复杂。