1

特定のjQuery関数を模倣しようとしています(jQuery関数のバニラを書き込もうとしていjavascriptます)。ここでこれを作成しました

function ezWork(element) {
    if (typeof element === 'string') {
        document.getElementById(element);
        console.log('Got element');
    }
}


ezWork.prototype.on = function(event, callback) {
    if (typeof event === 'string') {

        if (event === 'click') {
            if(window.addEventListener) {
                element.addEventListener('mousedown', callback);
                alert('addEventListener called');
            } else if (window.attachEvent) {
                element.attachEvent('onmousedown', callback);
            } else {
                element.onmousedown = callback;
            }
        }
    }
}

ezWork('click').on('click', function(e) {
    e.preventDefault();
    alert('Worked');
});

http://jsfiddle.net/aJmMa/

なぜ .on が定義されていないのか興味があります (私はこれを行うべきだと思う方法でこれを行っています。これがこれを行う適切な方法であることがわかっているかどうかではありません。学ぶために、関数に関数を追加するために私がやろうとしていることを行う正しい方法は何ですか?)

助けてくれてありがとう!

私が今得るエラーは、「.on」が定義されていないということです。

4

2 に答える 2

2
var ezWork = (function(win, doc) {

  // Constructor
  function EzWork(element) {
    this.element = this._init(element);
  }

  EzWork.prototype = {
    _init: function(element) {
      return doc.getElementById(element);
    },

    on: function(event, callback) {
      // simplified...
      this.element.addEventListener(event, callback);
    }
  };

  // Shortcut to create a new instance without using 'new'
  return function(element) {
    return new EzWork(element);
  };

}(window, document));

ezWork('click').on('click', function(e) {
  e.preventDefault();
  alert('Worked');
});

デモ: http://jsbin.com/oquduf/2/edit

于 2013-04-15T03:38:43.360 に答える
0

ezWork()のインスタンスを返さないためですezWork実際、何も返されません。elementそれを修正すると、それが未定義であることがわかります。それを追加して、プロパティとしてアクセスする必要があります。

function ezWork(element) {
    if (!(this instanceof ezWork)) {
        return new ezWork(element);
    }
    if (typeof element === 'string') {
        element = document.getElementById(element);
        console.log('Got element');
    }
    this.element = element;
}

http://jsfiddle.net/aJmMa/1/

于 2013-04-15T03:40:53.190 に答える