Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   OOP в javascript (https://javascript.ru/forum/misc/12564-oop-v-javascript.html)

mycoding 23.10.2010 14:35

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 страниц текста

Sweet 23.10.2010 15:22

Цитата:

Сообщение от mycoding
Я пытаюсь уже второй год понять что и как.

На это есть хорошая поговорка: Нечего жопу мучить, если сра** не охота:)

mycoding 23.10.2010 15:23

Просто надо понять, без понимания очень сложно писать плагины и расширения для js-framework-ов.

monolithed 23.10.2010 15:38

Цитата:

Сообщение от mycoding
Но почему в javascript через жопу сделано ООП?

1. Наверное потому, что язык был написан всего за 10 дней, а эталоном были Java, Self и Lua
Цитата:

Сообщение от mycoding
Самый большой косяк, это constructor.
Что это вообще за такое...

constructor - свойство, значением, которого является ссылка на функцию-конструктор. Другими словами, когда появляется свойство prototype, оно уже имеет в своем составе значение представленное в виде свойства constructor.

Цитата:

Сообщение от mycoding
Вообще почему ООП в js на прототипах?

Потому как разработчику импонировали языки Self и Lua

prototype - свойство, которое инициализируется в момент определения функции. Иными словами это объект-образец, по которому создаются другие объекты, это просто свойство объекта, в котором содержатся все атрибуты и методы, которые будут наследоваться порождённым объектом (при использовании оператора new). то тут не понятно?

mycoding 23.10.2010 15:48

А почему 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 тормозит инет в развитии.

monolithed 23.10.2010 16:12

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();

mycoding 23.10.2010 16:21

Эти два примера ещё больше запутали)))
Но все равно спасибо, что пытаешь объяснить)

У меня вообще за все время учебы две темы, которые понять не получается.
Это 3d с матрицами, кватернионами и другими способами и javascript
темы вроде ООП.
Хотя с js я сам разбираюсь.

monolithed 23.10.2010 16:34

Может этот пример поможет разобраться, а точнее расширить кругозор и не заморачиваться на прототипах:

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

mycoding 23.10.2010 16:42

А почему у object в данном случае при вот этом
console.dir(object);
Только один метод method и property
показывается, а prototype и constructor нету?

monolithed 23.10.2010 16:56

Мы же создаем функцию и соответственно вызываем ее свойства и методы, но внутри можно определить 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

mycoding 23.10.2010 17:02

В данном примере в this ,будет window,
а если сделать вот так, то функция.
var object = function(){
       this.property = 'property';
       this.method = function(){
           return 'method';
        };

};
 
console.log(object.constructor);


А вообще это называется идиотизм разработчика.
Нафига так делать.
Я обычные вещи типа document.getElementById(); пытался года два понять если не больше.
Вообще уже лет 6 занимаюсь вебом, а до сих пор нуб.
У меня есть знакомый который всего за 3 год кодинга по вебу, такой профи стал, что я
до сих пор не могу его нагнать по его тогдашнему уровню, а сейчас он вообще мега
спец.

B@rmaley.e><e 23.10.2010 18:22

Цитата:

Сообщение от mycoding
Вообще по моему мнению, если бы не Adobe уже давным давно был бы нормальный js и фитчи вроде webgl и css3-8 и html7-10 web 3.0-5.0
А так этот Adobe со свои Flash и Flex тормозит инет в развитии.

лолщито? Какая вообще связь между JS и Adobe? К Вашему сведению, Adobe использовала стандарт ECMAScript 4 для ActionScript 3.

Цитата:

Сообщение от mycoding
Я обычные вещи типа document.getElementById(); пытался года два понять если не больше.

Ищите проблему в себе.

mycoding 23.10.2010 19:07

Цитата:

лолщито? Какая вообще связь между JS и Adobe? К Вашему сведению, Adobe использовала стандарт ECMAScript 4 для ActionScript 3.
Вы меня своим вопросом просто удивляете.
Связь такая, видео,аудио, графика все это до сих пор является большой не разрешимой проблемой без flash.
Если бы не Стив Джобс и google, Adobe ещё бы на несколько лет оттянуло релиз HTML5.
У Adobe то эти все фишки есть, а у простых js-кодеров нет.
Я не знаю как, но то, что Adobe лабирует свои интересы по сдерживанию развития js и новых стандартов это точно.
И меня очень удивило, что Вы это не знаете.

Мне раньше очень не нравился Стив Джопс, он мне и до сих пор не совсем нравится, но то что он воюет с Adobe за развитие новых стандартов, я ему очень благодарен. Мало того, что я за 5-6 лет не стал
супер кодеров в js, php,css,html так ещё и ActionScript изучать и Flex и другие фитчи Эдоб мне совсем не хочется. Я итак летом целый месяц потратил на Flex и результат плохой. Надо времени минимум год, чтобы стать более менее спецом во Flash или FLEX.

monolithed 23.10.2010 19:32

Цитата:

Сообщение от mycoding
Связь такая, видео,аудио, графика все это до сих пор является большой не разрешимой проблемой без flash.

думаю, что ActionScript что JavaScript имеют право на существование, первый потому что не только умеет взаимодействовать с файловой средой, но и приложения просты в разработке, а второй более производительный и привычный для веба.

Но сама технология Flash не может исчезнуть по определению, т.к. все больше и больше появляется вакансий поиска графических дизайнеров со знанием Flash, и им не обязательно даже понимать, что такое ActionScript, чтобы делать сложную анимацию и пр. К тому же Google Analytics использует Flash вопреки тому, что можно заменить на JavaScript.
Плюс на флеше можно можно сделать то что не возможно даже в самых последних редакциях JavaScript (к примеру звуковой и видеоанализ файлов)

Dreamweaver же не умер, им активно пользуются, хотя в блокноте удобней.

Кстати об ООП, в ActionScript все более привычно

mycoding 23.10.2010 19:44

Да да про ООП в ActionScript я знаю)))
Супер штука, нам бы в js такую же.

monolithed 23.10.2010 19:54

В продолжение темы ООП для сравнения в плане наследования:

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

mycoding 23.10.2010 20:00

Сейчас читаю книгу https://www.packtpub.com/object-orie...libraries/book
Даже про __proto__ рассказано, просто супер книга.
Сейчас про наследование, через прототипы читаю.

monolithed 23.10.2010 20:14

У меня мнение о этой книге не такое положительное мнение т.к. 90% - это учебный материал основ JS, но ник как не ООП, считаю название вообще неуместным.
В сравнении с PHP. Объекты, шаблоны и методики программирования

B@rmaley.e><e 23.10.2010 20:14

Цитата:

Сообщение от mycoding
Связь такая, видео,аудио, графика все это до сих пор является большой не разрешимой проблемой без flash.

По Вашей логике изобретатели молотка виноваты в том, что тормозят развитие отвертки как инструмента для забивания гвоздей. Если определенный инструмент лучше подходит для выполнения некоторых задач, почему его изобретатели виноваты в том, что юзеры используют именно его, а не другой?

Джобс воюет с Адобом не за счастье простых пользователей (Вы же не думаете, что Вы кому-то нужны?), а за собственное благосостояние.

monolithed 23.10.2010 20:20

Цитата:

Сообщение от B@rmaley.e><e
Джобс воюет с Адобом не за счастье простых пользователей (Вы же не думаете, что Вы кому-то нужны?), а за собственное благосостояние.

Недавно читал статью на хабре, в которой говорится обратное (за качество), но я с этим не могу также согласиться.

Мир спасет гугл.

mycoding 23.10.2010 20:24

B@rmaley.e><e не надо приплетать молотки сюда.
Есть такая штука - монополия, пока ты её держишь у тебя сверх доходы.
Приведу в пример диск блюрей, по словам производителей они уже давно могут понизит его стоимость и внедрить, но в этом не заитерисованы американские производители фильмов, так как они ещё до конца все не выжали из DVD.
Поэтому примеры с молотком не надо приводить это не к месту.

B@rmaley.e><e 23.10.2010 20:32

1. Какой профит Адобу от монополии на продвинутые инструменты в вебе?
2. Чем флеш плох конечному юзеру?
3. В чем отличие от молотка?

mycoding 23.10.2010 20:53

1 - В том, что их продукт покупают.
В отличие от России за границей продукты Adobe покупают, а не использую кряк копии. Даже для школьников и студентов, правительство
США и Японии закупают лицензионный софт со скидкой около 80% и ставят в классах для обучения. И это очень большие деньги. Javascript является свободным программировать на нем можно без денег и платного софта.
2 - Пользователю он очень хорош и ему без разницы.
Хотя Flash реально чаще слетает чем тот же самый js.
Но кодеру нужно очень много времени на его изучение и много сопутствующего. Я просто не хочу его изучать, если ожно без него я бы с радостью бы использовал и плеер и видео проигрыватель в своих разработках.
3 - При том, что отверткой забивать гвозди нельзя и пример не в тему.
Js это штука такая, что если его развить он сможет очень много.
Ваш пример не в тему, просто признайте это и не спорьте.

B@rmaley.e><e 23.10.2010 22:18

Цитата:

Сообщение от mycoding
При том, что отверткой забивать гвозди нельзя и пример не в тему.

Ну так проигрывать аудио и видел файлы с помощью JS + HTML еще недавно тоже нельзя было.
Из отвертки тоже можно сделать супер комбайн.
Цитата:

Сообщение от mycoding
В том, что их продукт покупают.

Кого покупают? За использование флеша, вроде как, никаких лицензионных отчислений платить не надо. А что касается IDE - гугль говорит, что есть и бесплатные аналоги.
Ну да ладно, я плохо знаю, как обстоят дела с разработкой на флеше, пусть Адобы получают деньги за него. Но почему тогда столько лет флеш спокойно существовал, его использовали и никто не кричал, что он говно, и надо все делать в нативном HTML'е?

А потому, что все эти HTML5 плюшки понадобились совсем недавно, в связи с бурным развитием веб-приложений. Еще лет 5 тому назад прослушивание аудио или просмотр видео онлайн было крайне редким явлением, сейчас - оно практически повсюду. Поэтому и изменяется основной инструмент веба - HTML + JS + CSS. Если раньше все это было не столь важно, и можно было списать весь дополнительный функционал на какой-нибудь опциональный плагин, то сейчас, когда эти вещи вышли на передний план, оставлять это какому-то стороннему плагину как-то нехорошо (Сами подумайте: если основные инструменты перестанут соответствовать требованиям рынка, они быстро перестанут быть основными).

И вообще, JS как язык очень даже хорош (А в данной теме Вы критикуете именно его "ядро"). В плане функционала его можно допиливать (Чем WHATWG и будут заниматься), но средств языка вполне достаточно. Как мы видели на примере ECMAScript 4, перелопачивать его никто не будет, будут только расширять.

mycoding 23.10.2010 22:32

Эх я не буду с Вами больше спорить)
Вы как будто-от балды пишете ответы.
Лишь скажу, что в firefox еще в версии 3.6 собирались сделать полноценное наследование как в ActionScript и реализовать нормальное ООП.
Так что по поводу переделки это ещё не факт!

B@rmaley.e><e 23.10.2010 22:46

Цитата:

Сообщение от mycoding
Лишь скажу, что в firefox еще в версии 3.6 собирались сделать полноценное наследование как в ActionScript и реализовать нормальное ООП.
Так что по поводу переделки это ещё не факт!

Каким местом то, что собирались (и делают) в Firefox относится к официальному стандарту?

Kolyaj 24.10.2010 23:16

Цитата:

Сообщение от mycoding
Лишь скажу, что в firefox еще в версии 3.6 собирались сделать полноценное наследование как в ActionScript и реализовать нормальное ООП.

А нормальное ООП -- это такое ООП, которое вы сможете осилить? Мне просто интересно, какое оно, нормальное ООП.

И вы возможно мне не поверите, но в JS полноценное наследование.

vladlen 25.10.2010 17:56

Нет, свойств приватных нет! Вот ужас! Вдруг кто прочтет их, а там ... :blink:
mycoding, вы дискутируете на темы, глубину которых вы не понимаете.
А то что вы так долго вникаете в JS это как-то странно, может вам и не стоит вовсе вникать? Я разобрался за 1 день, на сайте все написано и даже нарисовано, охренеть как разжевано.

mycoding 25.10.2010 20:16

Разбираться стоит, я за счет этого зарабатываю.
Мне если честно без разницы, я раньше Qt занимался, но работы совсем нет.
И перешел полностью на веб.

Вы может быть считаете, что понимаете.
Я тоже иногда думаю, да здесь все просто и понятно.
Но когда начинаешь для framework-ов писать плагины.
Или делать чат нормальный, или интерактивную графическую карту без
flash. Вот тут все недопонимания и вылазиют.

Не надо себя считать спецом, я тоже много чего о себе думал.
Теперь мнение одно я - говно кодер и нос не задираю...

vladlen 25.10.2010 21:27

Цитата:

Сообщение от mycoding (Сообщение 75795)
Не надо себя считать спецом

Я не спецо, а чайно.

Цитата:

Сообщение от mycoding (Сообщение 75795)
Вы может быть считаете, что понимаете

Главное понять суть, как говориться: зри в корень. А вот понимания рынка точно по теме у вас не наблюдается. Причем тут компании пытающиеся что-то придумать, компании которые покупают эти компании и открытые технологии, которые используют и те и другие? Никто ничего не лоббирует, просто открытые технологии тоже требуют инвестиций, а откуда бы им взяться, да так чтобы сразу все проапгрейдили? Гугл и Эпл не хотят использовать сомнительные продукты, да еще и платить за это деньги. Открытые технологии снижают себестоимость конечной продукции.
Написал сумбурно и скомкано, но общая идея такова и другой она не будет.

Цитата:

Сообщение от mycoding (Сообщение 75795)
Но когда начинаешь для framework-ов писать плагины.
Или делать чат нормальный, или интерактивную графическую карту без
flash. Вот тут все недопонимания и вылазиют.

Конечно, но это проблема непонимания архитектуры фреймворка, JS тут уже с боку припеку.

Цитата:

Сообщение от mycoding (Сообщение 75795)
я - говно кодер и нос не задираю...

А это может быть как правдой, так и нет. Заниженная самооценка плохо, но завышенная еще хуже.

Kolyaj 25.10.2010 21:29

Цитата:

Сообщение от mycoding
Не надо себя считать спецом, я тоже много чего о себе думал.
Теперь мнение одно я - говно кодер и нос не задираю...

Непонятно, почему эта уверенность экстраполируется на других.

mycoding 25.10.2010 22:00

Вообще я для себя сделал вывод, нет плохих учеников, есть плохие преподы. :)

Например,я по одной методике уже 3-их людей английскому обучил за 2 недели!!!!
Хотя В школе это не могут сделать за 5 лет и за 3 года университета.
И везде есть изуминка.
В любом предмете, можно тягомотно идти, говорить, что зедсь все просто, а на сам деле не понимать.
Я начал читать книгу одну по JS она мне очень уровень повысила за 2 дня. Очень многое понял, что раньше вообще было глухо.

Не помню писал это на форуме или нет, но напишу ещё раз фразу конструктора танка Т-34.
Цитата:

Сложное может сделать и дурак,
а сложное сделать простым только гений.
Только не надо со мной опять спорить, я вообще не люблю ни с кем спорить)
Если осознаю, что не прав, то признаю и извиняюсь, а многие уверены, что они правы и никогда не признаются в обратном.

Shaci 25.10.2010 22:06

Цитата:

Сообщение от vladlen (Сообщение 75776)
Я разобрался за 1 день, на сайте все написано и даже нарисовано, охренеть как разжевано.

Цитата:

Сообщение от vladlen (Сообщение 75802)
Заниженная самооценка плохо, но завышенная еще хуже.

Не стоит так заявлять.

+ ООП разжевано подробно не на сайте, а в статьях Дмитрия Сошникова.
Но сайт действительно хороший, не спорю.

mycoding 25.10.2010 22:33

А можете ссылки дать на Дмитрия Сошникова
Я что то не находил, как не странно.
А может еще где разжевано comet?
А то все никак.
Те статьи которые есть, это не совсем то.

Сошникова нашел.
Все никак не доберусь до его статей.
Но то, что читал, реально хорошие.

monolithed 25.10.2010 22:49

http://dmitrysoshnikov.com/
Если нужно на русском, то начинай с конца архива (с права, к примеру http://dmitrysoshnikov.com/2009/06/)

vladlen 26.10.2010 00:04

Shaci, мне хватило и материала с сайта. Также к обозрению предлагается первоисточник в виде спецификации. По моему материала предостаточно, а дальше пусть работает серое вещество.
Вообще, для меня страшный сон - это типизированные языки. А тут все от лукавого ;)

x-yuri 29.10.2010 19:52

Цитата:

Сообщение от mycoding
Эх я не буду с Вами больше спорить)

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

p.s. надо меньше ныть и больше делать ;) и не надо быть таким доллароуправляемым...

mycoding 29.10.2010 20:27

Да не ною я, хватит уже ;)

А про доллороуправляемость тоже хватит.

Большинство из тех кто мне пишет на этом форуме, живут в Москве и в Питере и получают приличные деньги.
Не ною я , это просто констатация фактов, что платят только Москве, Питеру и за границей.

А вообще меня больше сейчас другое интерисует.
Мне очень нравится этот сайт, но уж очень не хватает материала полезного на нём. Может сделать, что типа такого.
Илья Кантор выдвигает на главной странице темы по которым он может написать супер статьи и предлагает оплатить его работу а мы все скидывается.
Просто мне например очень не удобно и по средствам накладно ехать в Москву или другие города.
Мне стало очень не хватать ресурсов этого сайта.


Часовой пояс GMT +3, время: 18:00.