Для общего понимания ООП в JavaScript Вы не можете добиться большего успеха, чем чтение Douglas Crockford :
Для вентиляторов Dojo (и для общих методов) у Neil Roberts есть хорошие статьи:
dojo.delegate JavaScript Метакласса dojo.declare () является, вероятно, самой усовершенствованной основой ООП в основных библиотеках вокруг. Я смещаюсь, но не делаю честное слово. Вот примеры того, как использовать его.
простой простой объект А:
// Let's define a super simple class (doesn't inherit anything).
dojo.declare("Person", null, {
// Class-level property
answer: 42,
// Class-level object property
name: {first: "Ford", last: "Prefect"},
// The constructor, duh!
constructor: function(age){
this.age = age; // instance-level property
},
// A method
saySomething: function(verb){
console.log("I " + verb + " " +
this.name.first + " " + this.name.last + "!" +
" -- " + this.answer);
},
// Another method
passportControl: function(){
console.log("I am " + this.age);
}
});
Пример использования:
// A fan of Ford Perfect
var fan = new Person(18);
fan.saySomething("love"); // I love Ford Perfect! -- 42
fan.passportControl(); // I am 18
Единичное наследование легко:
// Let's create a derived class inheriting Person
dojo.declare("SuperAgent", Person, {
// Redefine class-level property
answer: "shaken, not stirred",
// Redefine class-level object property
name: {first: "James", last: "Bond"},
// The constructor
constructor: function(age, drink){
// We don't need to call the super class because
// it would be done automatically for us passing
// all arguments to it.
// At this point "age" is already assigned.
this.drink = drink; // Instance-level property
},
// Let's redefine the method
saySomething: function(verb){
// Let's call the super class first
this.inherited(arguments);
// Pay attention: no need for extra parameters, or any extra code,
// we don't even name the class we call --- it is all automatic.
// We can call it any time in the body of redefined method
console.log("Yeah, baby!");
},
shoot: function(){ console.log("BAM!!!"); }
});
Пример использования:
// Let's create a James Bond-wannabe
var jb007 = new SuperAgent(45, "Martini");
jb007.saySomething("dig"); // I dig James Bond! -- shaken, not stirred
// Yeah, baby!
jb007.passportControl(); // I am 45
jb007.shoot(); // BAM!!!
// Constructors were called in this order: Person, SuperAgent
// saySomething() came from SuperAgent, which called Person
// passportControl() came from Person
// shoot() came from SuperAgent.
Mixins:
// Let's define one more super simple class
dojo.define("SharpShooter", null, {
// For simplicity no constructor
// One method to clash with SuperAgent
shoot: function(){
console.log("It's jammed! Shoot!");
}
});
находящееся в Mixin множественное наследование:
// Multiple inheritance
dojo.declare("FakeAgent", ["SuperAgent", "SharpShooter"], {
// Let's do it with no constructor
// Redefine the method
saySomething: function(verb){
// We don't call super here --- a complete redefinition
console.log("What is " + verb "? I want my " + this.drink + "!");
},
});
Пример использования:
// A fake agent coming up
var ap = new FakeAgent(40, "Kool-Aid");
ap.saySomething("hate"); // What is hate? I want my Kool-Aid!
ap.passportControl(); // I am 40
ap.shoot(); // It's jammed! Shoot!
// Constructors were called in this order: Person, SuperAgent
// saySomething() came from FakeAgent
// passportControl() came from Person
// shoot() came from SharpShooter.
, Как Вы видите, dojo.declare()
, дает все предметы первой необходимости с простым для использования API: прямое единичное наследование, находящееся в mixin множественное наследование, автоматическое объединение в цепочку конструкторов и вышестоящие методы без стычек.
Если Вы (и Ваша команда) привыкли к Java, но потребность сделать некоторый JavaScript для веб-сайта, возможно, необходимо рассмотреть Google Web Инструментарий (GWT). Это позволяет Вам кодировать JavaScript с помощью Java, который преобразовывается в JavaScript. Я не попробовал его, все же.
JavaScript является на самом деле довольно прохладным языком. Это имеет несколько дефектов (включая разрешение Вам сделать очень глупый материал), но с немного сам дисциплина можно сделать большой материал. JavaScript на самом деле объект - ориентирован, не так класс - ориентированный, но можно сделать большую часть того же материала. У Вас нет наследования (AFAIK), но это не строго вообще (одна из его мощных, но также и опасных функций) с вводом, таким образом, Вы найдете, что это не ограничивает.
mepcotterell предоставляет хорошие ссылки, но я хотел бы добавить, что я лично предпочитаю рассматривать пространства имен как объекты т.е. DoctaJonez.Namespace1 = {};
.
Например, в http://mckoss.com/jscript/object.htm .
Вы найдете набор примеров при гуглении для "объектно-ориентированного JavaScript". Путем взгляда на популярные платформы JavaScript как Ext JS Вы получите чувство для этих понятий и как они применяются на практике.
Использование MooTools. См. статью , Как записать Класс .
Mootools