Классы на прототипах!
Есть такая задача!(На литкод решал)
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]"
Подскажите пжл!
|