вопрос по созданию объектов
в чем разница использования при создании объекта
функции-конструктора и инициализатора объекта? или можно пользоваться тем, чем больше нравится и разницы между ними нет? |
разницы нет
|
Цитата:
|
и еще такой вопрос, больше никаких способов создания объектов нету? только эти два? а то не хотелось бы что-то упустить
|
var obj = JSON.parse("{"+"'a'"+":"+"200"+"}") как вариант) или var q = 200 //наполняем q свойствами) q.w = 40 q.x = 600 //получаем обьект q:200 {w:40, x:600} или так var q = NULL //наполняем q свойствами) q.w = 40 q.x = 600 //получаем обьект q{w:40, x:600} |
хехе, да такой тоже знаю, но ИМХО, первые два способа конструктор или инициализатор удобнее использовать на мой взгляд
|
Стоян Стефанов в своей книге "JavaScript. Шаблоны" рекомендует пользоваться инициализаторами, а не конструкторами. Можете прочесть, если есть желание.
|
Цитата:
|
1. Краткая форма записи.
2. Отсутствие необходимости разрешения имен в разных областях видимости. 3. Конструктор может вернуть объект не того типа, который ожидает программист. |
а инициализатор в отличие от конструктора создает сразу экземпляр объекта?
|
Цитата:
|
Цитата:
|
не очень понял разницу в таких записях
1. car = { wheels: 4, color: 'red' } 2. var book = { topic: "JavaScript", fat: true }; подскажите чем они различаются? 1 это инициализатор, а вторая запись как называется? |
Цитата:
что не так? обьясни эту строчку я ни слова не понял Цитата:
|
Цитата:
2) ничем они не отличаются скажу так, {} это неявный вызов конструктора Object , ок? |
ясненько, просто немного не ясно было, почему в первом варианте в конце не ставится точка с запятой, а во втором варианте ставится точка с запятой в конце.
|
Цитата:
|
ок ясно, спасиб +) поставил бы еще + в карму, только не дает еще раз плюсить
|
Цитата:
|
еще вопросик один появился, про методы
есть ли разница между 1. описываем функцию отдельно от конструктора объекта, а затем присваиваем ее свойству 2. описываем функцию внутри конструктора, т.е. this.свойство = function(){} если разницы нету, то можно использовать любой вариант какой удобнее? |
Цитата:
просто если это действие внутри конструктора, то его можно повторять с разными обьектами не пишА каждый раз)) оператор new между нами говоря вообще делает следущее допустим у нас есть конструктор Cat() обычные люди делают так var cat1 = new Cat() тут оператор new просто создает новый пустой обьект и устанавливает this внутри функции (первой вызванной после него функции) на этот новый обьект, ну и ПРИМЕНЯЕТ к нему Cat(), который и делает свои грязные делишки со свойствами этого пустого обьекта через this)) иными словами var cat1 = {}.Cat() типа того)) как посчитается то что справа, то результат (пустой обьект после воздействия на него функции Cat() ) кладется в то что слева))) да, кстати ты в прототипах разбираешься)? я могу обьяснить в 3-4 предложения))) |
Wizout, а проверить перед тем, как спрашивать?) Делайте так, как Вам удобней. Чтобы код хорошо читался и был логичным (если можно так выразиться).
|
Цитата:
Цитата:
|
Цитата:
что оч удобно)) Типа того. Так вот Это называется классы и прототипы. Вся эта дрянь нужна чтобы в одном обьекте методы записать ОДИН РАЗ, а его "дети" смогут юзать эти методы как свои собственные, и дублироваться в каждом ребенке они не будут))) вначале если ты че-то вызываешь у обьекта, то это ищется в самом нем, если там нет, то ищется в методах отца))) все просто)) и естественно можно было бы в каждый ребенок КОПИРОВАТЬ какой то метод, но придумали не копировать общие методы а записывать этот метод один раз в ОТЦЕ, а в детях класть только на него ссылку)) - суть такова))) |
Wizout, я сам до этого изучал язык с более строгим синтаксисом vba. НУ и немного asm'а) По началу возникало аналогичное ощущение. Сейчас прошло) Скоро и Вы это полюбите ;) фридом...) Я, кстати, тоже новичок. В js месяц-полтора. Благо есть форум, где добрые люди объясняют и разжевывают, за что им очередное спасибо)
|
Цитата:
|
Цитата:
|
п.с. ДАА) изучаю JS 5 лет)) посмотрел в сторону других языков - ЖЕСТЬ))
реально НМОго лишних вещей и много не понытного и не нужного.. Например ЗАЧЕМ определть тип переменной??? неужели современные технологии не способны автоматом это делать?? способны) просто те языки появились 200 лет назад) |
Wizout, а можно вопрос: почему в js потянуло?)
Цитата:
|
Цитата:
и еще по поводу того как тут хорошо тут работает GC? чтобы объект быстрее был удален из памяти, стоит ли при прекращении использования объекта присваивать NULL, чтобы он быстрее удалился или это никак не повлияет работу GC? |
Цитата:
|
Цитата:
тот же самый паттерн КЭШ. Тут то же самое, ПОИСК метода в отце, и в отце отцов занимает время, у папки то ведь тоже может быть куча свойств и нужно по всем пробежаться и посмотреть на их имена совпадают ли с запрашиваемым)) это естественно) но это так реализовано что движки JS это все оптимизируют так, что НЕ влияет)) они составляют карту, и составляют области видимости) , замыкания)) иными слвоами поиск метода в ОТЦАХ занимает минимум времени потому что физически он ищется не в отцах а в специальном месте области видимости)) |
Цитата:
обьекты в JS удаляются автоматически тогда когда на обеькт перестает существовать хотя бы одна ссылка. например var q = {a:20} q это НЕ имя обьекта, как может показаться, q это лишь ссылка на обьект, то есть ТО что с право создалось и засунулось в память, а ссылка на это засунулась в q мы так же можем сделать так var w = q оператор ровно посмотрел что находится в q? посмотрел что там ссылка, посмотрел что по ней, посмотрел адрес этого в памяти)) сгенерировал новую ссылку, и засунул её в w теперь в q и w лежит ссылки на одну и ту же область в памяти)) и если сделать так q.a = 400 то и w.a станет 400 потому чо это одно и то же) как очевидно)) так вот чтобы УДАЛИТЬ обьект ты думаешь что нужно сделать так: либо q либо w прировнять к NULL )) на само деле не так)) это действие просто заменит обьект {a:400} пустым обьектом из нулей, а как известно нули память тоже жрут. чтобы удалить обьект я уже говорил что нужно удалить все ссылки на него оператор delete delete q delete w все, вот терь когда сборщик мусора (а эта хреновина так называется) пройдется по памяти и заметит что есть участок на который ни че не ссылается) она очистит его)) |
Часовой пояс GMT +3, время: 18:34. |