1

如果我想返回一个包装在原型定义对象中的 HTML dom 元素,以便访问添加​​到原型中的方法,我将如何处理它。我想要实现的一个更具体的例子如下:

(function(window, document, undefined) {

    var i;
    var el;

    var Dome = function(selector, getAllMatches) {
        return Dome.core.init(selector, getAllMatches);
    };

    Dome.core = Dome.prototype = {
        constructor: Dome,
        el: "",
        init: function(selector, getAllMatches) {

            if (typeof arguments[0] !== "undefined") {
               this.el = getElement(selector);
                       if (this.el instanceof Dome){
                          return this.el;
                       }

                       else{
                          return this.el;
                       }
            }
        }

    .....

})(window, document);

我想要实现的是返回而不是 this.el 一个 instanceof Dome,这样我就可以访问它的方法。我知道 jquery 做得很好,但我没有太多的 js 经验,原型接近 0。

4

1 回答 1

1

听起来你想要一个工厂

  function Dome(element){
    this.element = element;

    this.getElement = function(){
      return this.element;
    }
  }

  Dome.factory = function(selector){
      var el = getElement(selector);
      return new Dome(el);
  }

  var d = Dome.factory('test');
  alert(d.getElement());

+编辑+

既然您询问了 jQuery 是如何做到的,我只是快速浏览了一下......

所以主要的 jQuery 工厂 ($, jQuery) 是;

jQuery = function( selector, context ) {
    // The jQuery object is actually just the init constructor 'enhanced'
    return new jQuery.fn.init( selector, context, rootjQuery );
}

然后,jQuery.fn.init 的原型由 jQuery.fn 填充。

因此,编辑我的原始答案以匹配这种格式将是;

  function Dome(element){
    this.element = element;
  }

  Dome.core = {
    getElement: function(){
      return this.element;
    }
  };

  Dome.prototype = Dome.core;

  Dome.factory = function(selector){
      var el = getElement(selector);
      return new Dome(el);
  }

  var d = Dome.factory('test');
  alert(d.getElement());
于 2013-05-15T14:34:13.140 回答