Как вы определяете класс ООП в JavaScript? - PullRequest
6 голосов
/ 08 февраля 2010

Исходя из моих наблюдений, в книге, которую я читаю о JavaScript, говорится, что есть ООП с JavaScript? Это мало что говорит об этом, я имею в виду, что не было объяснено, как определить класс. Может кто-нибудь дать мне образец фрагмента?

Спасибо

Ответы [ 7 ]

8 голосов
/ 08 февраля 2010

JavaScript - На основе прототипа , а не на основе класса.

Программирование на основе прототипов - это стиль объектно-ориентированного программирования в какие классы нет, а повторное использование поведения (известный как наследование на языках классов) выполняется через процесс клонирования существующих объекты, которые служат прототипами. это модель также может быть известна как бесклассовая, ориентированный на прототип или на основе экземпляра программирование. Делегация является языковая функция, которая поддерживает программирование на основе прототипов.

4 голосов
/ 08 февраля 2010

Я рекомендую эту книгу для краткого и точного объяснения как использования прототипного наследования JS, так и эмуляции классического OO-наследования в JS.

JavaScript: The good parts

3 голосов
/ 08 февраля 2010

Любая функция в 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));
2 голосов
/ 08 февраля 2010

Нет единого стандартного способа сделать ООП в JavaScript. Каждый использует немного разные системы классов / экземпляров, и большинство книг решают эту проблему. См. этот вопрос для обсуждения способов работы с OO в JS и выберите свою любимую.

2 голосов
/ 08 февраля 2010

Вот пара разных способов

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, прототип и тому подобное обрабатывают классы и посмотреть, подходит ли вам это.

1 голос
/ 08 февраля 2010

В JavaScript все является объектом. Так что даже функция - это объект. Таким образом, в js (меньше, чем <версия 2) функция создает классы (которые сами являются объектами первого класса). Идите <a href="http://www.javascriptkit.com/javatutors/oopjs.shtml" rel="nofollow noreferrer"> сюда , здесь и здесь для лучшего понимания

1 голос
/ 08 февраля 2010

Следующий фрагмент может помочь вам начать работу с объектами 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...