gpt4 book ai didi

Javascript:对象返回自身 a.k.a. 链接

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:48:46 24 4
gpt4 key购买 nike

我正在尝试构建我自己的类似 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 原型(prototype),要么将元素与我的一起传递类(class)。我选择了第二个选项。我只是不知道在我的课上要返回什么,这样我才能继续进行链接。为了这个例子,我的简单目标是能够编写以下代码行:

MF('someDiv').children('someClass');

在一次孤注一掷的尝试中,我尝试返回一个 MF 的新实例,默认情况下它不应该有实例,并导致我陷入无限循环。我真的不知道我应该回到那里。非常感谢任何帮助!

最佳答案

看起来你也尝试过使用模块模式,但没有利用原型(prototype)..

当你想链接某些东西时,你要么需要在可链接的方法中返回它本身 (this),要么返回你的 Object< 的 new 实例/em>。在下面的示例中,我通过使用新实例实现了链接(好吧, child 看起来需要是一个列表,所以我对它们做了一个数组)。

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. 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19747998/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com