Показать сообщение отдельно
  #1 (permalink)  
Старый 10.08.2023, 16:04
Интересующийся
Отправить личное сообщение для Ctemmm9999 Посмотреть профиль Найти все сообщения от Ctemmm9999
 
Регистрация: 12.12.2021
Сообщений: 13

Классы на прототипах!
Есть такая задача!(На литкод решал)
var ArrayWrapper = function(nums) {
this.nums = nums;
};

ArrayWrapper.prototype.valueOf = function() {
return this.nums.reduce((sum, num) => sum + num, 0);
}

ArrayWrapper.prototype.toString = function() {
return `[${this.nums.join(',')}]`;
}

const obj1 = new ArrayWrapper([1,2]);
const obj2 = new ArrayWrapper([3,4]);

console.log(obj1 + obj2); // 10
console.log(String(obj1)); // "[1,2]"
console.log(String(obj2)); // "[3,4]"


Вопрос такой! никак не пойму! Почему методы не вызываются, а только экземпляр класса, и он автоматически вызывает метод, будь то приведение к строке или сложение экземпляров!(как он понимает какой метод вызывать) Причём если в консоль просто вывести экземпляр, то он никаких действий, будь то приведение к строке или сложение не делает!

А вот такая запись мне более понятна что откуда!
console.log(obj1.valueOf() + obj2.valueOf()); // 10
console.log(String(obj1.toString())); // "[1,2]"
console.log(String(obj2.toString())); // "[3,4]"

Подскажите пжл!
Ответить с цитированием