|
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, время: 12:25. |
|