В Javascript, как использовать (глобальную) функцию внутри объекта? Функция будет выполнять сложные задачи и будет использоваться при создании объектов

#javascript #function #object #call

Вопрос:

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

В приведенном ниже коде представлены два экземпляра: тестирование (01) и комментирование (02), и наоборот.

 "use strict";

function fullName() {
    return this.firstName   " "   this.lastName;
}

const person = {
    firstName: "Anant",
    lastName: "Ghotale"
    completeName: fullName.call(person) // (01) does not work
};

//person.completeName = fullName.call(person); (02) this works


console.clear();
console.log(person.completeName);

 

(02) работает, но (01) нет.

То есть создание нового свойства снаружи person при использовании вызова для ввода this = person работает, но не внутри него.

Это мои вопросы:

  1. Как мне использовать (вызывать) функцию внутри объекта?
  2. Это глупая попытка вызвать функцию внутри объекта? Есть ли лучший способ выполнить ту же задачу?

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

1. Вы можете создать completeName геттер get completeName() {... code ...} и самостоятельно ссылаться на свой объект, используя this

2. конкретная проблема, с которой вы сталкиваетесь, заключается в том, что completeName присваивается результат вызова fullName.call(person) в момент объявления объекта, который до person того, как ему присвоено значение.

Ответ №1:

Вероятно, вы захотите использовать для этого геттер.

 function fullName() {
  return this.firstName   " "   this.lastName;
}

const person = {
  firstName: "Anant",
  lastName: "Ghotale",
  get completeName() {
    return fullName.call(this)
  }
};

console.log(person.completeName) 

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

1. Но как вы вызываете функцию внутри объекта в целом?

2. Вы не можете получить доступ к объекту при его объявлении, потому что он еще не создан. Вы можете использовать геттер или обычную функцию, а внутри вы можете использовать call, bind и apply, поскольку вы вызываете / запускаете код после создания объекта в обоих случаях.

3. Можете ли вы показать пример? В используемом вами геттере функция не использовалась fullName . Что я хочу знать, так это то, как вы можете вызвать функцию внутри объекта, передавая значение ‘this’ в качестве объекта, внутри которого вызывается функция.

4. Я отредактировал ответ в соответствии с вашим вопросом.

5. Правильно, это то, что я имел в виду в своем первом комментарии. Хотя, средство получения намного лучше IMO. Поскольку вам не нужны родители. С другой стороны, в некоторых случаях вы хотите передавать аргументы, поэтому, конечно, это имело бы смысл. В этом случае я бы использовал apply вместо call и передал весь массив аргументов .