Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在对象类上实现jquery作用域的最佳方法?_Javascript_Jquery - Fatal编程技术网

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

Javascript 在对象类上实现jquery作用域的最佳方法?,javascript,jquery,Javascript,Jquery,在jQuery中,我想定义对象,这些对象充当具有私有和公共方法/属性的类。但也有一种方法来定义该对象的作用域。为了说明,考虑这个伪代码: var myclass = function(context) { $.setscope(context); // <-- this is not real, but I want something like this this.getItems = function() { return $('.grid');

在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_实例中“选择”某个内容时,它会强制jQuery自动使用page1的作用域。it中的所有公共或私有代码都应自动使用该范围。换句话说,我不必返回$'page1'.find'.grid'

我现在拥有的是一个var上下文='page';在顶部定义,然后是$context。查找。。。班上到处都是。这似乎有点多余


有人知道这是否可能,如果不知道,最好的方法是什么吗?

也许是这样的

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

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

这听起来像是你正在寻找的非常简单的抽象。只需在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');

这迫使您使用一种新方法来完成选择。你能让它在普通jquery中像$like一样工作吗?当然,但这可能会给那些不是你的人添加一个混乱的层,并在以后查看你的代码。更重要的是,如果你真的想在你的类中的某个时候使用$而不使用作用域呢?在使用jQuery库时,覆盖每个人都希望$成为的默认函数是危险的。