Шаблонные литералы в методах на объектах Javascript

#javascript #object #methods #template-literals

#язык JavaScript #объект #методы #шаблоны-литералы

Вопрос:

У меня возникла проблема при попытке утешить.зарегистрируйте литерал шаблона. Как вы можете видеть ниже, у меня есть простой объект samsung, у которого есть метод, при котором он включается и выводит литерал шаблона на консоль.

 let samsung = {  model: "S21",  camera: "48px",  processor: "Snapdragon888",  turnOn: function(model, camera, processor) {  console.log(  `I have turned on! I am the ${model}, I have a ${camera} camera and a ${processor} processor`  );  }, }; console.log(samsung.turnOn()); 

Я пробовал это множеством разных способов, используя функции со стрелками, используя оператор «это», добавляя/удаляя параметры функции, вводя «Samsung» вместо «это» и т. Д. Но он выводит следующее, несмотря ни на что: I have turned on! I am the ${model}, I have a ${camera} camera and a ${processor} processor

Комментарии:

1. » он печатает следующее, несмотря ни на что: я включил! Я ${модель}, у меня есть камера ${камера} и процессор ${процессор} » Я не верю, что такой результат возможен. Шаблон должен быть обработан, а заполнители заменены значениями. Если вы не укажете значения, которые вы получите undefined , но вы не просто напечатаете заполнители.

Ответ №1:

Вы не передали функции никаких параметров, поэтому они заданы по умолчанию undefined .

Если вы хотите получить значение свойства объекта, используйте this ссылку на объект:

 let samsung = {  model: "S21",  camera: "48px",  processor: "Snapdragon888",  turnOn: function() {  console.log(  `I have turned on! I am the ${this.model}, I have a ${this.camera} camera and a ${this.processor} processor`  );  }, }; console.log(samsung.turnOn()); 

Комментарии:

1. Спасибо! Я забыл о том, чтобы не вводить параметры после стольких изменений. Я также попробовал «это» еще раз, и теперь это работает нормально, так что, должно быть, я сделал что-то неправильно в первый раз. Очень признателен Spectric!

Ответ №2:

Просто для того, чтобы вы поняли ситуацию:

this может использоваться для ссылки на текущий объект для области выполнения, в случае вашего примера это объект, который вы определили.

Использование этого ключевого слова позволяет вам получить доступ к любому доступному методу ( this.turnOn() ) или свойству ( this.camera ).

Одно из предостережений при использовании функций со стрелками заключается в том, что this они будут пропускать свое значение, поэтому будьте осторожны, когда использовать синтаксис для определения ваших методов.

В вашем случае это могло бы сработать, если бы вы определили функцию вне объекта и просто передали каждый параметр отдельно с помощью . оператора.

 const turnOn = (model, camera, processor) =gt; {  console.log(  `I have turned on! I am the ${model}, I have a ${camera} camera and a ${processor} processor`  ); }; turnOn(object.model, object.camera, object.processor);  

Или использовать this метод, определенный внутри объекта, для ссылки на каждое свойство.

Комментарии:

1. Привет, Антонио, большое тебе спасибо за объяснение! Теперь это имеет больше смысла. Я пробовал это в обоих направлениях, с «этим» и без, и это работает нормально. Очень признателен!