OOP в javascript
Извините за эмоции которые сейчас собираюсь написать...
Но почему в javascript через жопу сделано ООП? Я пытаюсь уже второй год понять что и как. Статьи по 50 раз читал на этом сайте, в книга и в других ресурсах. Знаю 100% рабочий вариант, но не понимаю почему это так. Самый большой косяк, это constructor. Что это вообще за такое... До чего все просто в с++ а здесь как будто специально это сделали, так что редко кто допрет. В моем понимание следующие два кода должны быть идентичны. Но один из них не рабочий. function ClassWindow(){} ClassWindow.prototype={ constructor:{ a:'', b:'', c:'', f1:function(){} }, e:'', d:'', v:'', f2:function(){}, f3:function(){} } function ClassWindow(){ this.a=''; this.b=''; this.c=''; this.f1=function(){} } ClassWindow.prototype={ e:'', d:'', v:'', f2:function(){}, f3:function(){} } В чем разница между ClassWindow.constructor и ClassWindow.prototype.constructor Вообще почему ООП в js на прототипах? В с++ я за один вечер все понял, прочитав 15 страниц текста |
Цитата:
|
Просто надо понять, без понимания очень сложно писать плагины и расширения для js-framework-ов.
|
Цитата:
Цитата:
Цитата:
prototype - свойство, которое инициализируется в момент определения функции. Иными словами это объект-образец, по которому создаются другие объекты, это просто свойство объекта, в котором содержатся все атрибуты и методы, которые будут наследоваться порождённым объектом (при использовании оператора new). то тут не понятно? |
А почему constructor не получается увидеть вот так?
console.dir(ClassWindow); или вот так? var my = new ClassWindow(); console.dir(my); Когда он появляется. Просто в свойствах его нет, а при обращении он есть ClassWindow.constructor и ClassWindow.prototype.constructor my.constructor. Вообще по моему мнению, если бы не Adobe уже давным давно был бы нормальный js и фитчи вроде webgl и css3-8 и html7-10 web 3.0-5.0 А так этот Adobe со свои Flash и Flex тормозит инет в развитии. |
var Class = function(property){ alert('constructor'); //constructor this.property = property; } var object = new Class('object'); Class.prototype.method = function(){ alert('method'); //method }; alert(object.property); //property alert(object.method()); //method alert(object.constructor == Class); //true alert(Class.prototype.constructor == Class) //true var c = 'prototype есть у всех объектов!'; //1 c.constructor.prototype.method = function(){ //только так делать не нужно! alert(this); } c.method(); //2 String.prototype.method = function(){ alert(this); } c.method(); |
Эти два примера ещё больше запутали)))
Но все равно спасибо, что пытаешь объяснить) У меня вообще за все время учебы две темы, которые понять не получается. Это 3d с матрицами, кватернионами и другими способами и javascript темы вроде ООП. Хотя с js я сам разбираюсь. |
Может этот пример поможет разобраться, а точнее расширить кругозор и не заморачиваться на прототипах:
var object = (function(){ var instance = { property : 'property', method : function(){ return 'method'; } }; return instance; })(); alert(object.property) //property alert(object.method()) //method alert(object.constructor == Object); //true |
А почему у object в данном случае при вот этом
console.dir(object); Только один метод method и property показывается, а prototype и constructor нету? |
Мы же создаем функцию и соответственно вызываем ее свойства и методы, но внутри можно определить prototype и constructor.
сравни с предыдущим примером: var object = (function(){ this.property = 'property'; this.method = function(){ return 'method'; }; return this; })(); alert(object.property) //property alert(object.method()) //method alert(object.constructor == Object); //false |
В данном примере в this ,будет window,
а если сделать вот так, то функция. var object = function(){ this.property = 'property'; this.method = function(){ return 'method'; }; }; console.log(object.constructor); А вообще это называется идиотизм разработчика. Нафига так делать. Я обычные вещи типа document.getElementById(); пытался года два понять если не больше. Вообще уже лет 6 занимаюсь вебом, а до сих пор нуб. У меня есть знакомый который всего за 3 год кодинга по вебу, такой профи стал, что я до сих пор не могу его нагнать по его тогдашнему уровню, а сейчас он вообще мега спец. |
Цитата:
Цитата:
|
Цитата:
Связь такая, видео,аудио, графика все это до сих пор является большой не разрешимой проблемой без flash. Если бы не Стив Джобс и google, Adobe ещё бы на несколько лет оттянуло релиз HTML5. У Adobe то эти все фишки есть, а у простых js-кодеров нет. Я не знаю как, но то, что Adobe лабирует свои интересы по сдерживанию развития js и новых стандартов это точно. И меня очень удивило, что Вы это не знаете. Мне раньше очень не нравился Стив Джопс, он мне и до сих пор не совсем нравится, но то что он воюет с Adobe за развитие новых стандартов, я ему очень благодарен. Мало того, что я за 5-6 лет не стал супер кодеров в js, php,css,html так ещё и ActionScript изучать и Flex и другие фитчи Эдоб мне совсем не хочется. Я итак летом целый месяц потратил на Flex и результат плохой. Надо времени минимум год, чтобы стать более менее спецом во Flash или FLEX. |
Цитата:
Но сама технология Flash не может исчезнуть по определению, т.к. все больше и больше появляется вакансий поиска графических дизайнеров со знанием Flash, и им не обязательно даже понимать, что такое ActionScript, чтобы делать сложную анимацию и пр. К тому же Google Analytics использует Flash вопреки тому, что можно заменить на JavaScript. Плюс на флеше можно можно сделать то что не возможно даже в самых последних редакциях JavaScript (к примеру звуковой и видеоанализ файлов) Dreamweaver же не умер, им активно пользуются, хотя в блокноте удобней. Кстати об ООП, в ActionScript все более привычно |
Да да про ООП в ActionScript я знаю)))
Супер штука, нам бы в js такую же. |
В продолжение темы ООП для сравнения в плане наследования:
javascript: function Person(name){ this.name = name; } Person.prototype.hello = function(){ alert(this.name); }; var name1 = new Person("name1"); var name2 = new name1.constructor("name2"); name1.hello(); //name1 name2.hello(); //name2 ActionScript: class Person1 { public function name():String { return true; } } class Person2 extends Person1 { private var name1:String = 'name1'; override public function name():String { return name1; } } class Person3 extends Person1 { private var name2:String = 'name2'; override public function name():String { return name2; } } var people1:Person2 = new Person2(); trace(people1.name()); // name1 var people2:Person3 = new Person3(); trace(people2.name()); // name2 |
Сейчас читаю книгу https://www.packtpub.com/object-orie...libraries/book
Даже про __proto__ рассказано, просто супер книга. Сейчас про наследование, через прототипы читаю. |
У меня мнение о этой книге не такое положительное мнение т.к. 90% - это учебный материал основ JS, но ник как не ООП, считаю название вообще неуместным.
В сравнении с PHP. Объекты, шаблоны и методики программирования |
Цитата:
Джобс воюет с Адобом не за счастье простых пользователей (Вы же не думаете, что Вы кому-то нужны?), а за собственное благосостояние. |
Цитата:
Мир спасет гугл. |
B@rmaley.e><e не надо приплетать молотки сюда.
Есть такая штука - монополия, пока ты её держишь у тебя сверх доходы. Приведу в пример диск блюрей, по словам производителей они уже давно могут понизит его стоимость и внедрить, но в этом не заитерисованы американские производители фильмов, так как они ещё до конца все не выжали из DVD. Поэтому примеры с молотком не надо приводить это не к месту. |
1. Какой профит Адобу от монополии на продвинутые инструменты в вебе?
2. Чем флеш плох конечному юзеру? 3. В чем отличие от молотка? |
1 - В том, что их продукт покупают.
В отличие от России за границей продукты Adobe покупают, а не использую кряк копии. Даже для школьников и студентов, правительство США и Японии закупают лицензионный софт со скидкой около 80% и ставят в классах для обучения. И это очень большие деньги. Javascript является свободным программировать на нем можно без денег и платного софта. 2 - Пользователю он очень хорош и ему без разницы. Хотя Flash реально чаще слетает чем тот же самый js. Но кодеру нужно очень много времени на его изучение и много сопутствующего. Я просто не хочу его изучать, если ожно без него я бы с радостью бы использовал и плеер и видео проигрыватель в своих разработках. 3 - При том, что отверткой забивать гвозди нельзя и пример не в тему. Js это штука такая, что если его развить он сможет очень много. Ваш пример не в тему, просто признайте это и не спорьте. |
Цитата:
Из отвертки тоже можно сделать супер комбайн. Цитата:
Ну да ладно, я плохо знаю, как обстоят дела с разработкой на флеше, пусть Адобы получают деньги за него. Но почему тогда столько лет флеш спокойно существовал, его использовали и никто не кричал, что он говно, и надо все делать в нативном HTML'е? А потому, что все эти HTML5 плюшки понадобились совсем недавно, в связи с бурным развитием веб-приложений. Еще лет 5 тому назад прослушивание аудио или просмотр видео онлайн было крайне редким явлением, сейчас - оно практически повсюду. Поэтому и изменяется основной инструмент веба - HTML + JS + CSS. Если раньше все это было не столь важно, и можно было списать весь дополнительный функционал на какой-нибудь опциональный плагин, то сейчас, когда эти вещи вышли на передний план, оставлять это какому-то стороннему плагину как-то нехорошо (Сами подумайте: если основные инструменты перестанут соответствовать требованиям рынка, они быстро перестанут быть основными). И вообще, JS как язык очень даже хорош (А в данной теме Вы критикуете именно его "ядро"). В плане функционала его можно допиливать (Чем WHATWG и будут заниматься), но средств языка вполне достаточно. Как мы видели на примере ECMAScript 4, перелопачивать его никто не будет, будут только расширять. |
Эх я не буду с Вами больше спорить)
Вы как будто-от балды пишете ответы. Лишь скажу, что в firefox еще в версии 3.6 собирались сделать полноценное наследование как в ActionScript и реализовать нормальное ООП. Так что по поводу переделки это ещё не факт! |
Цитата:
|
Цитата:
И вы возможно мне не поверите, но в JS полноценное наследование. |
Нет, свойств приватных нет! Вот ужас! Вдруг кто прочтет их, а там ... :blink:
mycoding, вы дискутируете на темы, глубину которых вы не понимаете. А то что вы так долго вникаете в JS это как-то странно, может вам и не стоит вовсе вникать? Я разобрался за 1 день, на сайте все написано и даже нарисовано, охренеть как разжевано. |
Разбираться стоит, я за счет этого зарабатываю.
Мне если честно без разницы, я раньше Qt занимался, но работы совсем нет. И перешел полностью на веб. Вы может быть считаете, что понимаете. Я тоже иногда думаю, да здесь все просто и понятно. Но когда начинаешь для framework-ов писать плагины. Или делать чат нормальный, или интерактивную графическую карту без flash. Вот тут все недопонимания и вылазиют. Не надо себя считать спецом, я тоже много чего о себе думал. Теперь мнение одно я - говно кодер и нос не задираю... |
Цитата:
Цитата:
Написал сумбурно и скомкано, но общая идея такова и другой она не будет. Цитата:
Цитата:
|
Цитата:
|
Вообще я для себя сделал вывод, нет плохих учеников, есть плохие преподы. :)
Например,я по одной методике уже 3-их людей английскому обучил за 2 недели!!!! Хотя В школе это не могут сделать за 5 лет и за 3 года университета. И везде есть изуминка. В любом предмете, можно тягомотно идти, говорить, что зедсь все просто, а на сам деле не понимать. Я начал читать книгу одну по JS она мне очень уровень повысила за 2 дня. Очень многое понял, что раньше вообще было глухо. Не помню писал это на форуме или нет, но напишу ещё раз фразу конструктора танка Т-34. Цитата:
Если осознаю, что не прав, то признаю и извиняюсь, а многие уверены, что они правы и никогда не признаются в обратном. |
Цитата:
Цитата:
+ ООП разжевано подробно не на сайте, а в статьях Дмитрия Сошникова. Но сайт действительно хороший, не спорю. |
А можете ссылки дать на Дмитрия Сошникова
Я что то не находил, как не странно. А может еще где разжевано comet? А то все никак. Те статьи которые есть, это не совсем то. Сошникова нашел. Все никак не доберусь до его статей. Но то, что читал, реально хорошие. |
http://dmitrysoshnikov.com/
Если нужно на русском, то начинай с конца архива (с права, к примеру http://dmitrysoshnikov.com/2009/06/) |
Shaci, мне хватило и материала с сайта. Также к обозрению предлагается первоисточник в виде спецификации. По моему материала предостаточно, а дальше пусть работает серое вещество.
Вообще, для меня страшный сон - это типизированные языки. А тут все от лукавого ;) |
Цитата:
p.s. надо меньше ныть и больше делать ;) и не надо быть таким доллароуправляемым... |
Да не ною я, хватит уже ;)
А про доллороуправляемость тоже хватит. Большинство из тех кто мне пишет на этом форуме, живут в Москве и в Питере и получают приличные деньги. Не ною я , это просто констатация фактов, что платят только Москве, Питеру и за границей. А вообще меня больше сейчас другое интерисует. Мне очень нравится этот сайт, но уж очень не хватает материала полезного на нём. Может сделать, что типа такого. Илья Кантор выдвигает на главной странице темы по которым он может написать супер статьи и предлагает оплатить его работу а мы все скидывается. Просто мне например очень не удобно и по средствам накладно ехать в Москву или другие города. Мне стало очень не хватать ресурсов этого сайта. |
Часовой пояс GMT +3, время: 18:00. |