jQuery和面向对象的JavaScript - howto?

时间:2012-01-14 08:50:17

标签: javascript jquery oop

我看过thisthis(感谢谷歌) 但它没有足够的帮助。我想知道,如果,开箱即用,没有任何插件插件,可以做一些像原型一样的事情,例如:

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

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

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

});

欢迎任何想法/建议。

3 个答案:

答案 0 :(得分:6)

JQuery从未有过成为类框架的目的。它是关于页面操作和工具(如AJAX)。你可以用叉子敲钉子,但为什么不用锤子?

使用本机JavaScript创建基于类的继承系统会遇到麻烦,除非您是一名技术娴熟的JavaScript程序员。 Douglas Crockford will tell you it's possible,但他对闭包等的复杂性有深刻的理解。此外,如果系统变大,使用本机继承功能会变得不可持续。

我强烈推荐James Coglan的JS.Class框架。类定义看起来与您的示例几乎相同。它不是本机JS,但它适用于JQuery。

答案 1 :(得分:3)

如果你想要一个使用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);

答案 2 :(得分:0)

总之,没有。 jQuery不提供任何类和继承功能。您需要包含另一个库,例如klass(尽管有一个jQuery plugin与jQuery更紧密地联系在一起)