|
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 |
Часовой пояс GMT +3, время: 11:56. |
|