JQuery и объектно-ориентированный JavaScript - как? - PullRequest
4 голосов
/ 14 января 2012

Я прочитал это и это (спасибо Google) Но это не помогает достаточно.Я хотел бы знать, если прямо из коробки, без каких-либо надстроек плагинов, возможно сделать что-то подобное с прототипом, например:

MyClass = Class.create(Table,
{
  cookieName: 'w_myclass',
  prefix: 'myclass',
    ...blabla...

  // function
  initStr: function()
  {
    ...blabla...
  },

  // another function
  getIndice: function(param)
  {
    ...blabla...
    return 0;
  }

});

Любые идеи / предложения приветствуются.

Ответы [ 3 ]

6 голосов
/ 14 января 2012

JQuery никогда не имел целью быть фреймворком классов.Речь идет о манипулировании страницами и инструментами (например, AJAX).Вы можете забить гвоздь вилкой, но почему бы не использовать молоток?

Использование нативного JavaScript для создания системы наследования на основе классов создает проблемы, если вы не очень опытный программист на JavaScript. Дуглас Крокфорд скажет вам, что это возможно , но у него есть глубокое понимание сложности замыкания и т.д.Я настоятельно рекомендую фреймворк JS.Class Джеймса Коглана.Определения классов будут выглядеть почти идентично вашему примеру.Это не нативный JS, но он отлично работает с JQuery.

3 голосов
/ 14 января 2012

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

Вторая половина этого поста http://www.codescream.com/?p=18 охватывает это,но я напишу здесь резюме о том, как сделать объект в javascript, который вы можете использовать в почти объектно-ориентированной структуре.

Это будет выглядеть примерно так:

function myObject(constructorParam1, constructorParam2, anotherOne, blabla){

  var text = "";
  // this event will be set everyTime you run myObject
  $(".foo").click(function(){
    text = $(this).text(); // copies the text inside the elements ".foo" to a local variable
    doSomething();
  });

  function aPrivateFunction1(){


  }

  function aPrivateFunction2(){

  }

  function internalAdd(a,b){
    return a+b;
  }

  var size = 1; // privateVaribale
  var name = blabla;


  if(name===undefined){
     name="No name";
  }

  aPrivateFunction1(); // run "aPrivateFunction1()

  // you can consider all code above as being part of the constructor.
  // The variables declared above are private, and the functions are private as well

  // bellow are public functions  that you can access in an OOP manner
  return {
    getSize: function(){
        return size;
    },

    setSize: function(newSize){
        size = newSize;
    },

    getName: function(){
        return name;
    },

    setName: function(newName){ 
        name = newname;
    },

    addAndTurnPositive: function(n1,n2){
        var val = internalAdd(n1,n2);
        if(val<0){
            return val*-1;
        }
        return val;
    }
  }
}

// then you can run it like
var anInstance = myObject("aaa",1234,"asdak",123);
anInstance.setSize(1234);
var t = anInstance.addAndTurnPositive(-5,2);
0 голосов
/ 14 января 2012

Одним словом, нет.jQuery не предлагает никаких классов и функций наследования.Вам нужно будет включить другую библиотеку, такую ​​как klass (хотя есть плагин jQuery , который более тесно связывает его с jQuery)

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