Javascript:对象返回自己a.k.a. chaining
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Javascript:对象返回自己a.k.a. chaining,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2064字,纯文字阅读大概需要3分钟。
内容图文
我正在尝试构建自己的小jquery类库,但是我正在创建这个链接模式的时间非常艰难.基本上我有一个类有一堆方法,可以更容易地操作文档.这是一个例子
function MF(selector){
var DO; // Stands for DocumentObject
this.select = function(selector){
return document.getElementById(selector);
}
if(typeof selector === 'string'){
DO = this.select(selector);
}else if(selector instanceof HTMLElement){
DO = selector;
}
this.children = function children(selector){
return DO.getElementsByClassName(selector);
}
return {
MF: ???
}
}(null);
我的反思可能有问题,但我想弄清楚的是,为了获得文档对象(html元素)的其他方法,我需要扩展HTMLElement原型或者将元素与我的类一起传递.我选择了第二种选择.我只是无法弄清楚我的班级要回归什么,以便我可以继续进行链接.为了这个例子,我简单的目标是能够编写以下代码行:
MF('someDiv').children('someClass');
在绝望的尝试中,我尝试返回一个新的MF实例,默认情况下不应该有实例,并导致自己进入无限循环.我真的无法想象我应该回到那里.任何帮助是极大的赞赏!
解决方法:
看起来你也试图使用模块模式,并没有利用原型..
当你想链接某些东西时,你需要在可链接的方法中返回它自己(this),或者返回你的Object的新实例.在下面的例子中,我通过使用新实例来实现链接(好像孩子们看起来需要成为一个列表,所以我做了一个数组).
var MF = (function () { // module pattern start
function MF(selector) {
if (!(this instanceof MF)) return new MF(selector); // always construct
this.node = null; // expose your DO
if (typeof selector === 'string') {
this.node = document.getElementById(selector);
} else if (selector instanceof HTMLElement) {
this.node = selector;
} else {
throw new TypeError('Illegal invocation');
}
}
MF.prototype = {}; // set up any inheritance
MF.prototype.select = function (selector) {
return new MF(document.getElementById(selector)); // returns new instance
};
MF.prototype.children = function (selector) {
var MFs = [],
nodes = this.node.getElementsByClassName(selector),
i;
for (i = 0; i < nodes.length; ++i) {
MFs[i] = new MF(nodes[i]);
}
return MFs; // array of items of new instances
};
return MF; // pass refence out
}()); // module pattern end
然后,例如,您可以链接…
MF(document.body).children('answer')[0].children('post-text')[0].node;
内容总结
以上是互联网集市为您收集整理的Javascript:对象返回自己a.k.a. chaining全部内容,希望文章能够帮你解决Javascript:对象返回自己a.k.a. chaining所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。