LINUX.ORG.RU

Что есть конструктор в JS?

 


0

1

Мне как человеку, изучавшему Java понимается так:

Получается я создал экземпляр класса Array, вызвав его конструктор

 var arr = new Array();

Но как я понял в JS, Array - это объект и этот же объект является конструктором

Что ж, выходит что класс Array в Java это объект в JS?

Что то трудновато после Java понимать ООП JS


new - новый. Ты создал новый объект. Чо непонятного то? А классов в JS нет. Вообще, кроме как синтаксического сахара в ECMAScript 2015. Прототипы только.

anonymous
()
Ответ на: комментарий от anonymous

А почему так? Потому, что очень быстро - клонировать, вместо того, чтоб создавать заново. Полноценные классы для скрипта - ненужная тормозная роскошь. Такты процессора и время экономить надо. :)

anonymous
()

Но как я понял в JS, Array - это объект и этот же объект является конструктором

да, это глобальный обьект, используется для создания масивов

Что ж, выходит что класс Array в Java это объект в JS?

нет

var o = new Array() // создали инстанс
var o1 = []; тоже создали инстанс  


Что то трудновато после Java понимать ООП JS

потому что в JS оно на прототипах

var C = function(prop) {
   this.prop = prop;
};

C.protype.getProp = function() {
   return this.prop;
};

var o = new C(1);
alert(o.getProp());

kiotoze ★★★★
()

В JS всё есть объект. Кроме атомарных типов, и то условно, ибо в большинстве случаев они тоже ведут себя как объекты.

В качестве конструкторов в JS используются функции, которые создают объект путём напихивания свойств в свой this. Даже не спрашивай, кто такую наркоманию придумал. И не забывай, что функция — это тоже объект.

Нет чёткого разделения между свойствами и методами. Ибо JS отчасти функциональный язык. В жабке только с 8-й версии начали завозить какое-то подобие самостоятельных функций, а тут это всегда было. Грубо говоря, ты можешь записать свойство a, потом записать вместо него туда функцию. Но адекватные люди так без веской причины не делают.

Пока не постигнешь основы ES3, а потом ES5, даже не заглядывайся на сахарок из ES6, а то тебе тут такого насоветуют, что вконец запутаешься и будешь спотыкаться на ровном месте.

А ещё

> ((~[]/[])*(~[]/[])+"")[-~[]<<-~[]]
'f'

Полагаю, это всё, что тебе нужно знать о JS. Удачи!

bodqhrohro_promo
()
Ответ на: комментарий от Shadow

С абстракциями над JS та же фигня — без знания JS может быть непонятно, почему что-то [не] работает именно так. Это и других слоёв абстракции касается; к примеру, сложно осознавать, чем типизированные массивы лучше объектов, если не осознаёшь, чем обращение к переменной по строке-ключу отличается от обращения непосредственно по указателю, что такое стек и куча, почему куча медленнее, почему целочисленные операции быстрее и т. п.

bodqhrohro_promo
()
Ответ на: комментарий от Shadow

поддерживаю. руби кодер __не есть__ джс кодер, учитывая многие составляющие того самого содержащегося в этих терминах истинного высказывания

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.