在你的問題中的代碼是不能反映一個適當的實施,但回答你的直接問題,是的,這...
UI.folders().getSelectedFolder()
...將是一個方法鏈的例子。
裝飾模式是不同的。如果你有一組方法,每個人應該總是先調用一些常用的功能,你可以創建一個裝飾,將返回首先調用常見的一種,那麼實際的一個功能...
function foo() {
console.log('I\'m foo, and I\'m first, and I was given these args:', arguments);
}
function decorateWithFoo(decorated) {
return function() {
foo.apply(this, arguments);
decorated.apply(this, arguments);
};
}
所以,你可以使用decorateWithFoo
創建總是調用foo
第一功能...
// create and decorate bar()
var bar = function(a,b) {
console.log('I\'m bar, and I was called after "foo", and was given args:', a, b);
};
bar = decorateWithFoo(bar);
bar(123, 456); // this will first call `foo()`, then (the original) `bar()`.
// create and decorate baz()
var baz = function(a,b) {
console.log('I\'m baz, and I was called after "foo", and was given args:', a, b);
};
baz = decorateWithFoo(baz);
baz(123, 456); // this will first call `foo()`, then (the original) `baz()`.
一些語言已經建立了用於創建裝飾器的語法。 JavaScript目前沒有。
如果你發現自己使用的裝飾以不同的方式,你可以創建,設置了最初的裝飾功能的其他功能...
function generateDecorator(decorator) {
return function (decorated) {
return function() {
decorator.apply(this, arguments);
decorated.apply(this, arguments);
};
};
}
所以我們原來decoreateWithFoo
可能已經建立了這樣的...
function foo() {
console.log('I\'m foo, and I\'m first, and I was given these args:', arguments);
}
var decorateWithFoo = generateDecorator(foo);
你沒有正確地進行繼承。 '... folders.prototype.getSelectedFolder'沒有任何好處,因爲'UI.prototype.folders'只返回一個普通數組。爲'folders.prototype'產生效果,你需要調用'folders'作爲構造函數,並讓它返回被構造的對象而不是Array。 – 2012-04-15 17:25:42
...但是,正確實施,'UI.folders()。getSelectedFolder()'是方法鏈接的一個例子。 – 2012-04-15 17:26:43
+1我不確定爲什麼投票反對,這不僅僅是一個很好的描述性問題,而且還包括了你想要做的事情。 – 2012-04-15 17:32:25