Стоян Стефанов в своей замечательной книге "объектно-ориентированный JavaScript говорит:В чем разница между объектом JavaScript и примитивными типами?
Любое значение, которое не принадлежит к одному из пяти типов примитивов, перечисленных выше, является объектом.
С пяти примитивных типов он означает Number
, String
, Boolean
, Undefined
и Null
. Однако в консоли Google Chrome кажется, что число вообще не является примитивным типом (по сравнению с C
примитивными типами, такими как int
). Похоже, что число примитивного имеет методы:
var a = 2.2;
console.log(a.toFixed()); // logs "2"
Таким образом, я полагал, что я могу работать с номером, как с объектом, так что я пытался присвоить свойство к нему:
var a = 2;
a.foo = 'bar';
console.log(a.foo); // logs undefined
I не понимаю этого поведения. Если номер имеет метод, он должен вести себя как объект, не так ли? Он даже имеет прототип:
Number.prototype.foo = 'bar';
var a = 2;
console.log(a.foo); // logs 'bar'
Так что это магия за этим? Как JavaScript обрабатывает объекты по сравнению с примитивными типами? Я бы предпочел не использовать слово примитивный и заменить его простых объектов. Как я вижу, это объекты, которые не могут быть расширены новыми свойствами, однако они построены через их конструктор, а также имеют прототип, который может быть расширен как обычный объект.
Это не определено, потому что вы не создали свой собственный пользовательский метод «foo». Когда вы сделали (number.prototype.), Все в порядке. Это не'магическое «просто классовое поведение». (доступно для всех типов). Поэтому я не уверен, как ответить на ваш вопрос: «Какая у него магия?» : L) –
Если все что-то осталось неясным, просто поместите комментарий или отредактируйте вопрос, я постараюсь соответствующим образом обновить ответ :) – C5H8NNaO4