gpt4 book ai didi

javascript - 一种功能和一种封装形式?

转载 作者:行者123 更新时间:2023-11-30 10:50:58 25 4
gpt4 key购买 nike

如果之前有人问过这个问题,我很抱歉,但我什至不确定使用什么搜索词来找到答案,而且当我尝试搜索时,我从来没有得到任何关于这个问题的具体内容。

我正在使用 Javascript,我想知道是否可以这样做:

find(x);             // find a document (for example)
find.inFolder(y); // find a folder's documents (for example)

换句话说,我可以拥有一个也可以用作对象/类的函数吗?我知道我可以运行一次 find() 并返回一个散列,以便 find.inFolder() 可以工作,但我希望有一种方法可以继续调用 find()。

可以用prototype做吗? (我的“原型(prototype)”知识非常有限)

function find() {}
find.prototype.inFolder = function() {}

可以在散列内完成吗? [我知道这段代码不起作用]

var find = {
() : function() {},
inFolder : function() {}
}

为了更进一步,有没有办法将 .inFolder() 的结果以这种方式发送到 find() 函数:

find().inFolder();

我知道你可能会说我不理解 javascript 的概念,你基本上是对的,但我看到人们用 JS 做了一些非常了不起的事情,所以我想我应该请专业人士出来那里。

在此先感谢您的帮助。

最佳答案

您所描述的是 Fluent interface (如果你想搜索的东西)。您可以像这样完成您想要实现的目标:

var find = function() {
this.inFolder = function() {
return this; // Although to stop chaining, you could return nothing here.
};
return this;
};

find().inFolder(); // .inFolder().inFolder()...

这是一个很棒的模式,尤其是在像 jQuery 这样的项目中使用时:

$("#element").find(".child_element").first();

每次调用都会返回一个带有 .find().first() 和许多其他函数的 jQuery 对象,这让您可以编写直观流畅的代码。


我有点喜欢您的 find().inFolder() 示例,所以这是一个扩展版本:

var find = function(file) {
this.folders = {
"Documents": ["Foo.txt", "Bar.txt"],
"Downloads": ["File.exe"],
"Misc": ["Picture.jpg"]
};

this.file = file;

this.inFolder = function(folder) {
var files = this.folders[folder];
return files.indexOf(this.file) >= 0;
};
return this;
};

alert(find("Foo.txt").inFolder("Documents")); // True
alert(find("File.exe").inFolder("Downloads")); // True
alert(find("Picture.jpg").inFolder("Downloads")); // False

http://jsfiddle.net/andrewwhitaker/TCdTd/

关于javascript - 一种功能和一种封装形式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5347347/

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