На основе моего наблюдения книга, которую я читаю о JavaScript, указывает, что существует ООП с JavaScript? Это не говорит очень об этом, я подразумеваю, что не было объяснено, как определить класс. Кто-то может дать мне демонстрационный отрывок?
Спасибо
Следующий фрагмент может помочь вам начать работу с бесклассовыми объектами JavaScript, основанными на экземплярах:
function getArea() {
return (this.radius * this.radius * 3.14);
}
function getCircumference() {
var diameter = this.radius * 2;
var circumference = diameter * 3.14;
return circumference;
}
function Circle(radius) {
this.radius = radius;
this.getArea = getArea;
this.getCircumference = getCircumference;
}
var bigCircle = new Circle(100);
var smallCircle = new Circle(2);
alert(bigCircle.getArea()); // displays 31400
alert(bigCircle.getCircumference()); // displays 618
alert(smallCircle.getArea()); // displays 12.56
alert(smallCircle.getCircumference()); // displays 12.56
Пример из: SitePoint - объект JavaScript -Ориентированное программирование
JavaScript основан на прототипах , а не на классах.
Программирование на основе прототипов - это стиль объектно-ориентированного программирования в , в котором классы отсутствуют, и повторное использование поведения (известное как наследование в языки на основе классов) выполняется посредством процесса клонирования существующих объектов, которые служат прототипами. Эта модель также может быть известна как бесклассовое, ориентированное на прототип или основанное на экземплярах программирование. Делегирование - это функция языка , которая поддерживает программирование на основе прототипов.
Я рекомендую эту книгу для краткого и точного объяснения того, как использовать прототипное наследование JS, а также как имитировать классический объектно ориентированный объект. наследование в JS.
Для создания объекта можно использовать любую функцию в javascript:
Пример:
function MyPoint(x, y) {
this.x = x;
this.y = y;
this.distanceTo = getDistance;
}
function getDistance(p) {
var dx = this.x-p.x;
var dy = this.y-p.y;
return Math.sqrt(dx*dx + dy*dy);
}
var p0 = new MyPoint(1, 2);
var p1 = new MyPoint(2, 3);
window.alert('The distance is ' + p0.distanceTo(p1));
В JavaScript все является объектом. Так что даже функция - это объект. Поэтому в js (менее < версии 2), функция делает классы (которые сами являются объектами первого класса). Пройдите здесь, здесь и здесь для лучшего понимания
Вот несколько способов
if (typeof FFX == "undefined") {
FFX = {};
}
//Static class
FFX.Util = ({
return {
method:function(){
}
})();
FFX.Util.method();
//Instance class
FFX.Util2 = ({
// private method
var methodA=function(){
alert("Hello");
};
return {
method:function(){
//Call private method
methodA();
}
});
var x= new FFX.Util();
x.method();
Другой способ
function MyClass(){
}
/* privileged functions */
MyClass.prototype.hello = function(){
alert("Hello");
}
Также вы могли увидеть, как jquery, prototype и тому подобное обрабатывают классы, и посмотреть, подходит ли это вам .
Не существует единого стандартного способа ООП в JavaScript. Все используют немного разные системы классов / экземпляров, и в большинстве книг проблема решается. См. этот вопрос для обсуждения способов работы с объектно-ориентированными объектами в JS и выберите свой любимый.