従来のClassicASPアプリケーションにある程度の健全性を持たせようとしています。その一環として、作成したいくつかのJScriptクラス用にFluentAPIを作成しようとしています。
例えばmyClass().doSomething().doSomethingElse()
概念はここに概説されています(VBScriptで)
これは私のサンプルJScriptクラスです。
var myClass = function () {
this.value = '';
}
myClass.prototype = function () {
var doSomething = function (a) {
this.value += a;
return this;
},
doSomethingElse = function (a, b) {
this.value += (a + b);
return this;
},
print = function () {
Response.Write('Result is: ' + this.value + "<br/>");
}
return {
doSomething: doSomething,
doSomethingElse: doSomethingElse,
print: print
};
}();
/// Wrapper for VBScript consumption
function MyClass() {
return new myClass();
}
次に、既存のVBScriptコードで、メソッドをチェーン化しようとしています。
dim o : set o = MyClass()
'' This works
o.doSomething("a")
'' This doesn't work
o.doSomething("b").doSomethingElse("c", "d")
'' This for some reason works
o.doSomething("e").doSomethingElse("f", "g").print()
関数に複数のパラメーターがある場合、" Cannot use parentheses when calling a Sub
"VBScriptエラーが発生します。不思議なことに、別の方法を実行すると機能するようです。
潜水艦を呼び出すときは括弧を省略すべきだと理解しています。でも:
1.戻り値があるのに、なぜSubとして認識されるのですか?
2. Fluent APIを実装するためにこれを回避する方法はありますか?