Почитав десяток другой статей об ООП в JS попытался подытожить то, что понял.
Получается создавая переменную let i = 3 конструктор берет свойства и методы из прототипов объекта number?
Или что-то не так?
Почитав десяток другой статей об ООП в JS попытался подытожить то, что понял.
Получается создавая переменную let i = 3 конструктор берет свойства и методы из прототипов объекта number?
Или что-то не так?
При необходимости вызова метода относительно примитива интерпретатор заворачивает значение в объект-обертку, результатом может быть другой примитив, а на временную "обертку" не остается никаких ссылок и сборщик мусора ее чуть позже где-то в тишине прикончит...
То есть 0.004.toFixed(2) неявно превратится в (new Number(0.004)).toFixed(2).
null/undefined
– free_ze
Apr 29 '18 at 09:58
Конструктор ниоткуда ничего не берёт.
При обращении к свойствам и методам срабатывает стандартная схема поиска по цепочке прототипов. Когда метод находится, в зависимости от того, написан ли он в строгом режиме, число либо оборачивается в объект, либо передаётся в this как есть.
Впрочем, некоторое время назад некоторые браузеры были неприспособлены к такому поведению и выполняли обёртывание в объект всегда. Кажется, сейчас везде исправлено.
var a = 1, b = Number(2), c = new Number(3)
console.log(typeof a, typeof b, typeof c)
Number.prototype.nonStrictFunc = function () {
return this
}
Number.prototype.strictFunc = function () {
'use strict'
return this
}
console.log(typeof a.nonStrictFunc(), typeof b.nonStrictFunc(), typeof c.nonStrictFunc())
console.log(typeof a.strictFunc(), typeof b.strictFunc(), typeof c.strictFunc())