在对象类上实现jquery作用域的最佳方法?

时间:2015-03-14 00:34:53

标签: javascript jquery

在jQuery中,我想定义充当类的对象(具有私有和公共方法/属性)。但也有办法为该对象定义范围。为了说明,请考虑这个伪代码:

var myclass = function(context) {
    $.setscope(context);  // <-- this is not real, but I want something like this

    this.getItems = function() {
        return $('.grid');  // after calling `setscope` above, this will look in the scope of #page1
    };
}
var myclass_instance = new myclass("#page1");

基本上这是什么,当我从myclass_instance中选择'某些东西时,它强制jQuery自动使用#page1的范围。其中的所有代码(公共或私有)都应自动使用该范围。换句话说,我不应该做return $('#page1').find('.grid');

我现在拥有的是var context = '#page';在顶部定义,然后是$(context).find(...在课堂的任何地方。这似乎有点多余。

有谁知道这是否可能,如果没有,是实现这个的最佳方法吗?

2 个答案:

答案 0 :(得分:0)

也许是这样的?

function myClass(context) {
  var _$ = $,
      $ = function() {
        return _$.find(context).apply(this, Array.prototype.slice.call(arguments));
      };

  this.getItems = function() { return $('.grid'); }
}

答案 1 :(得分:0)

这听起来像是你正在寻找的非常简单的抽象。只需在MyClass上定义一个方法,该方法始终在实例化中设置的范围内查询dom:

var MyClass = function(scope) {
   this.scope = scope;
};

MyClass.prototype.get = function(selector) {
  return $(selector,this.scope);
}

MyClass.doStuff = function() {
   var $el = this.get('#someid');
   //do some stuff with $el;
}

var o = new MyClass('#scope');