Аз съм доста нов в JavaScript и имам следното съмнение: правя някакъв експеримент с концепцията за вграден конструктор на функции.
Така че се опитвам да създам нов обект Number с помощта на оператора new.
Ако отворя Chrome Developer Tools и в Console изпълня следното изявление:
var a = new Number(3);
undefined
a;
Number {[[PrimitiveValue]]: 3}
както можете да видите, първо създавам нов обект Number с помощта на оператора new и след това изпълнявам този обект и получавам неговата стойност: Number {[[PrimitiveValue] ]: 3}
Проблемът е, че ако направя същото нещо във FireBug в FireFox, получавам нещо различно, получавам това:
var a = new Number(3);
undefined
a;
Number {}
И така, използвайки FireFox, правейки същото нещо, изглежда, че създаваме обекта Number, но този обект е празен и не съдържа 3 стойност, както е направено в Chrome.
Защо? Как е възможно? какво ми липсва
Друго съмнение е свързано с това как точно работи предишното създаване на обект, когато изпълнявам:
var a = new Number(3);
Добре, използвам концепцията за функционална конструкция, свързана с оператора нов. От това, което знам (но ме поправете, ако правя грешно твърдение), когато изпълнявам функция, използвайки оператора new, се случва, че:
Създава се нов празен обект. Така че в този случай се създава нов обект Number, който трябва да означава JavaScript обект, който има променливата proto, зададена на препратката към Number обект, така че този обект ще има достъп до всички методи, дефинирани за Number (следвайки прототипната концепция за наследяване, реализирана от JavaScript).
Променливата this, поставена в контекста на изпълнение на тази функция, се настройва на препратката към новосъздадения обект.
Параметърът се използва за задаване на свойството на обекта. Така че в този случай стойността ще бъде 3.
Защо, когато правя:
var a = new Number(3);
Получавам недефинирана стойност? Може да зависи от факта, че тази функция Number не връща никаква стойност?
Разсъжденията ми правилни ли са или пропускам нещо?
var a = 3;
и сте готови. - person Robusto   schedule 31.12.2015