Беда с прохождением "этого" - PullRequest
0 голосов
/ 30 октября 2018

Извините за плохое название, я действительно не знаю, как сформулировать свой вопрос.

Приведенный ниже код - небольшая часть того, что я делаю, чтобы автоматизировать генерацию кнопок в сочетании с событием щелчка для игры. Я пытаюсь передать функцию 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 голосов
/ 30 октября 2018

«this» работает только в функциональной области, но не в области объекта

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())
0 голосов
/ 31 октября 2018

Спасибо всем, я наконец решил переработать весь свой соответствующий код, чтобы сделать вещи не такими уж сложными.

0 голосов
/ 30 октября 2018

Будет ли работать итерация массива после создания объектов?

например.,

	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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...