Подтвердить что ты не робот

Является ли jQuery или JavaScript концепцией классов и объектов?

Я нашел следующий код где-то, но я неправильно понимаю код.

ArticleVote.submitVote('no');return false;

Является ли ArticleVote классом и submitVote() функцией этого класса?

Или что означает этот код? И есть ли какая-либо концепция классов и объектов в jQuery или в традиционном JavaScript? Как их создать? Поделитесь некоторыми ссылками или кодом.

4b9b3361

Ответ 1

Все объекты в JavaScript

В отличие от других, предположительно, чистых языков ООП. Функции также являются объектами, но они могут быть также конструктором объектов.

var ObjectCreator = function () {
};

Вышеупомянутая функция, которая, если вызвана соответствующим образом, создает объект. Вызывается соответствующим образом, что вы должны использовать оператор new:

var obj = new ObjectCreator;

Таким образом, хотя JavaScript не имеет классов как таковых, имеет смысл подражать этому поведению. Например:

class Foo {
    public void bar() {}
}

Foo foo = new Foo();

эквивалентен следующему JS-коду:

var Foo = function () {
    // constructor
};

Foo.prototype.bar = function () {}

var foo = new Foo;

Наследование отличается

Реальная разница возникает, когда вы хотите использовать наследование, которое является другим типом наследования (прототипным). Итак, учитывая два псевдокласса Foo и Bar, если мы хотим, чтобы Bar простирался от Foo, нам пришлось бы написать:

var Foo = function () {};
var Bar = function () {};

Bar.prototype = new Foo; // this is the inheritance phase

var bar = new Bar;

alert(bar instanceof Foo);

Литералы объектов

В то время как функции-конструкторы полезны, бывают случаи, когда нам нужен только только один экземпляр этого объекта. Написание функции-конструктора, а затем заполнение его прототипа свойствами и методами, как-то утомительно. Таким образом, JavaScript имеет объектные литералы, которые являются своего рода хеш-таблицами, только потому, что они застенчивы. Я сознаю, что они знают о ключевом слове this. Объектные литералы - отличный способ реализовать шаблон Singleton.

var john = {
    age : 24,

    isAdult : function () {
        return this.age > 17;
    }
};

Вышеприведенное, используя функцию конструктора, будет эквивалентно следующему:

var Person = function (age) {
    this.age = age;
};

Person.prototype.isAdult = function () {
    return this.age > 17;
};

var john = new Person(24);

Как насчет этого prototype thingy

Как многие говорили, объекты JavaScript наследуются от объектов. У этой вещи есть полезные аспекты, один из которых можно назвать паразитическим наследованием (если я правильно помню контекст, в котором Дуглас Крокфорд упомянул об этом). Во всяком случае, эта концепция прототипа связана с концепцией цепи прототипов, которая похожа на родительскую → дочернюю цепочку в классических языках OO. Итак, материал для наследования. Если метод bar вызывается в объекте foo, но этот объект не имеет метода bar, запускается фаза поиска элемента:

var Baz = function () {};

Baz.prototype.bar = function () {
    alert(1);
};

var Foo = function () {};
Foo.prototype = new Baz;

var foo = new Foo;

/*
 * Does foo.bar exist?
 *      - yes. Then execute it
 *      - no
 *          Does the prototype object of the constructor function have a bar
 *          property?
 *              - yes. Then execute it
 *              - no
 *                  Is there a constructor function for the prototype object of
 *                  the initial construct function? (in our case this is Baz)
 *                      - yes. Then it must have a prototype. Lookup a bar
 *                        member in that prototype object.
 *                      - no. OK, we're giving up. Throw an error.
 */
foo.bar();

Держись, ты сказал что-то о паразитарном наследовании

Существует ключевое различие между классическим наследованием OO и наследованием на основе прототипов. Когда объекты наследуются от объектов, они также наследуют состояние. Возьмите этот пример:

var Person = function (smart) {
    this.smart = smart;
};

var Adult = function (age) {
    this.age = age;
};

Adult.prototype = new Person(true);

var john = new Adult(24);

alert(john.smart);

Можно сказать, что john является паразитом анонимного Человека, потому что он беспощадно сосет человеческий интеллект. Кроме того, учитывая вышеизложенное определение, все будущие взрослые будут умными, что, к сожалению, не всегда верно. Но это не значит, что наследование объектов - это плохо. Это всего лишь инструмент, как и все остальное. Мы должны использовать его по своему усмотрению.

В классическом наследовании OO мы не можем сделать выше. Мы могли бы эмулировать его, используя статические поля. Но это сделает все экземпляры этого класса одинаковыми для этого поля.

Ответ 2

Javascript поддерживает объекты, но не классы - он использует прототип система.

Ответ 4

Да, JavaScript имеет впечатляющую поддержку объектно-ориентированного программирования, объектов и функций. На самом деле, я удивлен, что вы должны задать этот вопрос! В Интернете есть множество ресурсов, таких как:

http://mckoss.com/jscript/object.htm

http://www.webreference.com/js/column79/

http://www.javascriptkit.com/javatutors/oopjs.shtml

Дополнительные ресурсы: http://www.google.com/search?q=object+oriented+programming+javascript

JavaScript-фреймворки, такие как jQuery и Prototype, не могли быть созданы без этой поддержки в механизмах JavaScript.

Ответ 5

Конечно, JS имеет объекты и классы, но это не совсем обычный подход.

Это довольно широкий вопрос, но есть три основные вещи, которые вы хотите знать об объектах и ​​классах в JS:

1). Все это объект - это классно включает функции первого класса JS

2). Существуют литералы объектов

var myObject = { "foo": 123, "bar": [4,5,6] };

3). Наследование основано на прототипе, поэтому создание классов - скорее вопрос формы, чем функции. Чтобы получить эффект от класса, вы должны написать что-то вроде:

function myClass(foo)
{
  this.foo = foo;
}
myClass.prototype.myFooMethod = function() {alert(this.foo);}

var myInstance = new myClass(123);

myinstance.myFooMethod(); // alerts 123

Для вашего примера, вероятно, что ArticleVote является экземпляром объекта и, вероятно, не концептуально является классом, а submitVote будет методом объекта. не могу точно сказать, это может быть то, что вы бы назвали статическим методом на другом языке.

Ответ 6

Вы можете достичь вышеуказанного через Javascript, ничего общего с jQuery.

var ArticleVote= {}; 

ArticleVote.submitVote = function(voteResult) {
    console.log(voteResult);
}


function Vote(){
   ArticleVote.submitVote('no');
   return false;
}

Ответ 7

Вы можете использовать функцию JavaScript как класс.

ClassUtil = function(param){    
     privateFunction = function(param){    
        // Do some thing    
        return valueParam;
    }    
    this.publicFunction = function(){    
        var val1 = function1();    
        if (val1){    
            return true;    
        } else{    
            return false;
        }
    }
}

function getClass(){    
   var classUtil = new ClassUtil();     
   alert(classUtil.publicFunction());    
}

Существует одна публичная и одна частная функция. Вы можете вызвать публичную функцию из стороны, используя объект класса.