#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. Вы можете создать
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 и передал весь массив аргументов .