#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. Привет, Антонио, большое тебе спасибо за объяснение! Теперь это имеет больше смысла. Я пробовал это в обоих направлениях, с «этим» и без, и это работает нормально. Очень признателен!