Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.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 查看如何使用函数和函数,使用原型_Javascript - Fatal编程技术网

Javascript 查看如何使用函数和函数,使用原型

Javascript 查看如何使用函数和函数,使用原型,javascript,Javascript,我只是在胡闹,试图模仿某些jQuery函数(试图为jQuery函数编写普通的javascript),我在这里编造了这个 function ezWork(element) { if (typeof element === 'string') { document.getElementById(element); console.log('Got element'); } } ezWork.prototype.on = function(event

我只是在胡闹,试图模仿某些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');
});

我只是好奇为什么我会这样做。on没有定义(我在做我认为应该如何做的事情,也不是我是否知道这是正确的方法,我只是在尝试学习,在函数中添加函数的正确方法是什么?)

非常感谢你的帮助

我现在得到的错误是,“.on”未定义

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');
});
Demo:

因为
ezWork()
不返回
ezWork
的实例。事实上,它不会返回任何内容。一旦你修复了它,你会发现
元素
是未定义的。您必须添加它并将其作为属性访问

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;
}

嗯,
ezWork
看起来不像一个构造器。为此,您需要创建一个新实例。ezWork不是从它自己的原型继承,而是从它的构造函数的原型继承(即从Function.prototype继承自Object.prototype)。它只是通过id获取元素,这样就不会污染构造函数。下划线的意思是“private”,虽然它实际上是公共的,只是一种约定。感谢这项工作非常好,ezWork是否默认为ezWork.prototype,因为它是函数中的实际函数?这是否也会缓存文档和窗口以提高速度?或者你只是想要比键入文档和窗口更短的东西?是的,是的,你明白了
win
doc
是为了方便起见,但它是缓存的。谢谢,我要玩这个布局,(再次模仿玩jquery),我应该能够在EzWork中做更多的事情,而不仅仅是返回一个元素,对吗?比如使用正则表达式来确定他们是否放置了#或。对于类和id,是否也是_init:原型的保留关键字?最后一个问题:)当然,您可以通过将其更改为
return[].slice.call(doc.querySelectorAll(selector)),获得多个元素
并像使用jQuery一样使用它。