Javascript 查看如何使用函数和函数,使用原型
我只是在胡闹,试图模仿某些jQuery函数(试图为jQuery函数编写普通的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
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一样使用它。