Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.10.2010, 14:35
Аватар для mycoding
NodeJS developer - ушел
Отправить личное сообщение для mycoding Посмотреть профиль Найти все сообщения от mycoding
 
Регистрация: 06.01.2010
Сообщений: 1,022

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

Последний раз редактировалось mycoding, 23.10.2010 в 14:44.
Ответить с цитированием
  #2 (permalink)  
Старый 23.10.2010, 15:22
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Сообщение от mycoding
Я пытаюсь уже второй год понять что и как.
На это есть хорошая поговорка: Нечего жопу мучить, если сра** не охота
Ответить с цитированием
  #3 (permalink)  
Старый 23.10.2010, 15:23
Аватар для mycoding
NodeJS developer - ушел
Отправить личное сообщение для mycoding Посмотреть профиль Найти все сообщения от mycoding
 
Регистрация: 06.01.2010
Сообщений: 1,022

Просто надо понять, без понимания очень сложно писать плагины и расширения для js-framework-ов.
Ответить с цитированием
  #4 (permalink)  
Старый 23.10.2010, 15:38
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от mycoding
Но почему в javascript через жопу сделано ООП?
1. Наверное потому, что язык был написан всего за 10 дней, а эталоном были Java, Self и Lua
Сообщение от mycoding
Самый большой косяк, это constructor.
Что это вообще за такое...
constructor - свойство, значением, которого является ссылка на функцию-конструктор. Другими словами, когда появляется свойство prototype, оно уже имеет в своем составе значение представленное в виде свойства constructor.

Сообщение от mycoding
Вообще почему ООП в js на прототипах?
Потому как разработчику импонировали языки Self и Lua

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

Последний раз редактировалось monolithed, 23.10.2010 в 15:43.
Ответить с цитированием
  #5 (permalink)  
Старый 23.10.2010, 15:48
Аватар для mycoding
NodeJS developer - ушел
Отправить личное сообщение для mycoding Посмотреть профиль Найти все сообщения от mycoding
 
Регистрация: 06.01.2010
Сообщений: 1,022

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

Последний раз редактировалось mycoding, 23.10.2010 в 16:01.
Ответить с цитированием
  #6 (permalink)  
Старый 23.10.2010, 16:12
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

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

Последний раз редактировалось monolithed, 23.10.2010 в 16:45.
Ответить с цитированием
  #7 (permalink)  
Старый 23.10.2010, 16:21
Аватар для mycoding
NodeJS developer - ушел
Отправить личное сообщение для mycoding Посмотреть профиль Найти все сообщения от mycoding
 
Регистрация: 06.01.2010
Сообщений: 1,022

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

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

Последний раз редактировалось mycoding, 23.10.2010 в 16:37.
Ответить с цитированием
  #8 (permalink)  
Старый 23.10.2010, 16:34
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

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

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

Последний раз редактировалось monolithed, 23.10.2010 в 16:41.
Ответить с цитированием
  #9 (permalink)  
Старый 23.10.2010, 16:42
Аватар для mycoding
NodeJS developer - ушел
Отправить личное сообщение для mycoding Посмотреть профиль Найти все сообщения от mycoding
 
Регистрация: 06.01.2010
Сообщений: 1,022

А почему у object в данном случае при вот этом
console.dir(object);
Только один метод method и property
показывается, а prototype и constructor нету?
Ответить с цитированием
  #10 (permalink)  
Старый 23.10.2010, 16:56
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Другой взгляд на javascript Дубров Олег Javascript под браузер 24 27.05.2017 10:15
Выдвет ошибку JavaScript Ромио Opera, Safari и др. 4 21.10.2010 20:34
JavaScript разработчик (Яндекс, Москва) antonova Работа 2 08.07.2010 19:44
JavaScript на Яндекс.Фотки - почему тормозит браузеры? ZavFirefox Javascript под браузер 23 27.09.2009 19:24
Нужен Старший разработчик JavaScript Yandex Работа 17 19.08.2008 16:43