通过香草js构建自己的对象函数
Build own Object-functions via vanilla js
如何通过纯javascript构建自己的函数来调用定义对象?Jquery就是这样运行的,我想知道它是如何运行的。下面是一个小示例,它显示了我想要做的:
doc = {
qS: function(selector) {
return document.querySelector(selector);
}
};
var me = doc.qS('#id');
me.qS('span').innerText = 'Changed!';
<div id="id"><span>Test</span></div>
在你的代码中:
doc = {
qS: function(selector) {
return document.querySelector(selector);
}
};
var me = doc.qS('#id');
me.qS('span').innerText = 'Changed!';
调用doc.qS('#id')
后,me
包含一个DOM元素,该元素没有定义q5
方法。如果您希望像jQuery那样链式调用,您将不得不构建一些更多的机制,例如围绕DOM元素的包装器:
function DOM(elt) {
return {
qS(selector) { return DOM(elt.querySelector(selector)); },
set innerText(text) { elt.innerText = text; },
get innerText() { return elt.innerText; }
};
}
现在你可以这样做:
DOM(document).qS('#id').qS('span').innerText = "foo";
你可以将DOM实现为构造函数(通过new DOM
调用),并在其原型上指定qS
等方法,或者将DOM实现为ES6类,但这些都是真正的实现细节。
然而,要处理对querySelectorAll
等方法的调用,它返回事物列表,您必须将其扩展为处理多个元素(这就是jQuery所做的)。不久之后,您将拥有功能较差的jQuery版本或轻量级的jQuery版本(如zepto),您必须自己维护它们,以获得值得怀疑的好处。
如果您想要的只是querySelector
的别名,尽管通常被认为是不好的做法,您可以使用
Object.defineProperty(HTMLElement, 'qS', {
value(selector) { return this.querySelector(selector); }
});
但是现在你有另一件事要维护和解释,而且可能不值得这么麻烦。
很多人喜欢链接样式,可以说它是由jQuery流行起来的。但是其他人不喜欢它。我猜你可以说这是一种时尚,现在有点过时了。你不妨直接写
var id = document.querySelector('#id');
var span = id.querySelector('span');
span.textContent = 'Changed!';
当然,如果这就是你想做的,你可以只写querySelector('#id span')
作为开始。
您还可以考虑为什么您觉得需要挑选DOM元素并对它们进行处理,例如添加样式,也许?许多jQuery程序都是一堆扭曲的代码,它们以各种奇怪的方式遍历DOM,添加、删除和修改元素。您看到人们使用jQuery做的很多事情都可以通过明智地使用CSS来完成。随着需要在DOM周围走动和操作它的JS代码的减少,对语法糖(如使jQuery出名的链接)的需求也减少了。
如果你选择一个提供某种模板语言的现代框架,你可以将你需要在JS中进行的直接DOM操作的数量减少到几乎为零。
- JavaScript子对象访问自己的值
- 为什么对象的函数值没有自己的作用域
- 我怎样才能给数组中的每个对象赋予它们自己的键
- 在 Javascript 中创建具有自己属性的对象数组
- 更好的设计,以便从对象的方法引用自己的对象的属性
- 如何在 redis 中将 JS 对象传递给它自己的事件参数 - 连接事件上的哨兵
- 对象方法可以有自己的属性
- 节点 MYSQL 如何在自己的对象中获取连接的表
- 由 dojo.declare 创建的对象如何访问自己的属性
- 将jQuery与我自己的文档对象一起使用
- 如何在 SignalR 中返回具有自己的类属性的对象
- 将 jQuery 对象扩展到我自己的对象
- 函数访问函数中自己的对象属性
- 检索对象自己的标记
- 可以将对象属性转换为自己的对象
- 如何渲染自己的对象实例响应?(不是游标对象)
- 带有jQuery对象的OOP:更改jQuery数组的原型与创建我自己的对象树
- 引用自己的对象属性
- 通过香草js构建自己的对象函数
- 当字段是自己的对象类型时,如何使用JSONStringify