我在Javascript中構建了一個複雜對象,我想通過該對象的內部集合公開一個迭代器。在javascript中對代碼迭代器的最佳方式
我能想到的唯一的辦法就是在prototype.js中暴露的迭代器的常用方法:
customObject.each(function (item) { ... })
與所提供的功能迭代器每個爲集合中的每一項被稱爲一之後。
你知道其他可靠的方法嗎?也許一種方式,會讓用戶使用通常的foreach構造?
我在Javascript中構建了一個複雜對象,我想通過該對象的內部集合公開一個迭代器。在javascript中對代碼迭代器的最佳方式
我能想到的唯一的辦法就是在prototype.js中暴露的迭代器的常用方法:
customObject.each(function (item) { ... })
與所提供的功能迭代器每個爲集合中的每一項被稱爲一之後。
你知道其他可靠的方法嗎?也許一種方式,會讓用戶使用通常的foreach構造?
原型風格的函數是一個不錯的選擇,雖然你也可以考慮這樣的:
overlayRegistry = function() {
var overlays = [];
var index = 0;
return {
addOverlay : function(overlay) {
overlays.push(overlay);
count : function() {
return overlays.length;
},
reset : function() {
index = 0;
},
next : function() {
if (index < overlays.length) {
return overlays[index++];
} else {
return null;
}
},
each : function (callback) {
for (var index = 0, length = overlays.length; index < length; ++index) {
callback(overlays[index]);
}
}
}
}();
在這種情況下,你可以通過它迭代步驟,你需要等待其他事件(如就是這種結構背後的情況)
基本上,如果你需要的只是簡單的迭代,提供像each
這樣的方法可以很好地工作,但是如果你需要更多的控制,那麼類似上面的東西就可以工作(當然,你可以做兩者)
編輯
添加的每個方法
您應該改用for in
。
>>> var customObject = {x: 1, y:2} >>> for (a in customObject) console.log(a, customObject[a]) x 1 y 2
但請記住關於繼承的屬性。
>>>Object.prototype.yarrr = function yarrr(){ console.warn('YARRR!') } >>> for (a in customObject) console.log(a, customObject[a]) x 1 y 2 yarrr() >>> for (a in customObject) if (customObject.hasOwnProperty(a)) console.log(customObject[a]) x 1 y 2
是啊,但是你要確保customObject.hasOwnProperty(一)爲每個方法/屬性返回true。否則,你可能會結束繼承的東西。 – dylanfm 2009-10-15 11:05:55
考慮到它是一個複雜的對象,我只能假定它有'for..in'也會迭代的方法。 – 2009-10-15 11:06:00
如果我正確地理解了這個問題,他的自定義對象有一個內部集合,他想提供一種方法來遍歷內部集合中的元素,而不是自定義對象的屬性 – 2009-10-15 11:12:53