2011-03-18 6 views
1

この質問が以前に尋ねられた場合は申し訳ありませんが、回答を見つけるためにどのような検索用語を使用するのか、また検索しようとすると、この質問に固有のものは一切得られません。私はまた、オブジェクト/クラスとして使用することができます機能を持たせることができる、つまり、カプセル化の機能と形式?

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

私はJavascriptを使用していますし、このような何かを行うことが可能である場合、私は疑問に思って?私はfind()を一度実行して、find.inFolder()が機能するようにハッシュを返すことができることを知っていますが、私は可能な方法があることを望んでいます find()

プロトタイプでできますか? (私の "プロトタイプ"知識は非常に限られています)

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

ハッシュの内部で行うことはできますか?

:.inFolderの結果を持ってする方法があり、

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

はさらにそれをプッシュする[私はこのコードは動作しません知っている]()のfind()関数に、このように送信され

find().inFolder(); 

私はJavaScriptのコンセプトを理解していないと思うかもしれませんが、あなたはほとんど正しいでしょうが、私は人々がJSを使ってかなり素晴らしいことをするのを見ました。そこに。

ご協力いただきありがとうございます。

答えて

2

説明する内容は、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(); 

各呼び出しはとjQueryオブジェクトを返します。 .find().first()など多くの機能があり、直感的で流動的なコードを書くことができます。


は、私は一種のあなたの 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/

+0

純粋な素晴らしい!ありがとうありがとう! –

2

あなたが別の関数のメンバーに、機能を割り当てることができます。

find = function(x) { .... } 
find.inFolder = function(y) { ... } 

jsFiddleを。

しかし私は質問を理解しています。

+0

。ありがとうございました! –