#javascript
#javascript
Вопрос:
У меня есть функция
function log() {
console.log('something');
}
что я хочу, чтобы этот объект имел:
class Car {
constructor(name) {
this.name = name;
}
log() {
// something
}
}
Как я могу присоединить его, не повторяя код внутри функции?
Комментарии:
1.
Car.log = log;
2. @WaisKamal это добавит статическую функцию. Не то же самое, что и второй
3. Вы можете сделать:
Object.assign(Car.prototype, { log })
Ответ №1:
Вы можете прикрепить функцию как метод к Car
прототипу, так что теперь она будет доступна как метод во всех экземплярах.
function log() {
console.log('something');
}
class Car {
constructor(name) {
this.name = name;
}
}
Car.prototype.log = log;
const a = new Car("Audi");
const b = new Car("BMW");
a.log();
b.log();
Комментарии:
1. опередил тебя 😉
Ответ №2:
В принципе, вы можете сделать это тремя способами;
первый способ — использовать конструктор класса и передавать функцию в вызове конструктора
function log() {
console.log('something');
}
class Car {
constructor(name,log) {
this.name = name;
this.log = log
}
}
const audi = new Car("name",log);
audi.log();
второй способ — просто использовать оператор equal
function log() {
console.log('something');
}
class Car {
constructor(name,log) {
this.name = name;
}
log = log
}
const audi = new Car("some");
audi.log();
Третий способ — использовать prototype
function log() {
console.log('something');
}
class Car {
constructor(name,log) {
this.name = name;
}
}
Car.prototype.log = log;
const audi = new Car("some");
audi.log();
Комментарии:
1. Как я могу добавить метод получения, используя метод прототипа?
2. На самом деле прямого пути нет, но это можно сделать следующим образом -класс foo { constructor(){ this.a = «что-то»; } } класс bar расширяет foo { constructor(){ super(); } метод() { return this.a } } const newBar = new bar(); console.log(newBar.method())
Ответ №3:
Вот так
Либо как функция-член, ЛИБО в прототипе
class Car {
constructor(name) {
this.name = name;
}
log = str => console.log(str); // or log = log if log is defined elsewhere
}
const carA = new Car();
carA.log("vroom");
// or
const logger = str => console.log(str);
Car.prototype.logger = logger;
const carB = new Car();
carA.logger("vroom"); // also available to the previous and other Car objects
carB.logger("vroom");
Комментарии:
1. Это повторение кода внутри функции.
2. Как так. Я определяю только одну функцию в этом скрипте, поэтому повторений нет
3. Я хочу использовать функцию, которая была определена отдельно.
4. возможно ли это также с помощью Object.setPrototypeOf()?
5. Я не знаю и не использовал этот метод. Я думаю, что нет, когда я смотрю на документацию