回答
雖然你已經接受了答案,這是可能的1.6/5的ECMAScript第版:
function logElementID(element, index, array) {
var el = array[index],
prop = el.textContent ? 'textContent' : 'innerText';
el[prop] = el.id;
}
[document.getElementById('one'), document.getElementById('two')].forEach(logElementID);
或者通過延長Object
原型:
function doStuff (el) {
console.log(el);
};
Object.prototype.actOnGroup = function(func){
var els = this.length ? this : [this];
for (var i = 0, len = els.length; i<len; i++){
func(els[i]);
}
return this;
};
document.getElementsByTagName('div').actOnGroup(doStuff);
document.getElementById('one').actOnGroup(doStuff);
或者通過,同樣,延長Array
原型:
function doStuff (el) {
console.log(el);
};
Array.prototype.actOnGroup = function(func){
var els = this.length ? this : [this];
for (var i = 0, len = els.length; i<len; i++){
func(els[i]);
}
return this;
};
[document.getElementById('one'), document.getElementById('two')].actOnGroup(doStuff);
JS Fiddle demo。順便提一下,如果您想爲沒有(相對)最新的JavaScript實現的用戶提供forEach()
替代方案,那麼forEach()
的Mozilla開發者網絡頁面提供以下算法,算法100%真實在ECMA-262,第5版':
// Production steps of ECMA-262, Edition 5, 15.4.4.18
// Reference: http://es5.github.com/#x15.4.4.18
if (!Array.prototype.forEach) {
Array.prototype.forEach = function forEach(callback, thisArg) {
var T, k;
if (this == null) {
throw new TypeError("this is null or not defined");
}
// 1. Let O be the result of calling ToObject passing the |this| value as the argument.
var O = Object(this);
// 2. Let lenValue be the result of calling the Get internal method of O with the argument "length".
// 3. Let len be ToUint32(lenValue).
var len = O.length >>> 0; // Hack to convert O.length to a UInt32
// 4. If IsCallable(callback) is false, throw a TypeError exception.
// See: http://es5.github.com/#x9.11
if ({}.toString.call(callback) !== "[object Function]") {
throw new TypeError(callback + " is not a function");
}
// 5. If thisArg was supplied, let T be thisArg; else let T be undefined.
if (thisArg) {
T = thisArg;
}
// 6. Let k be 0
k = 0;
// 7. Repeat, while k < len
while (k < len) {
var kValue;
// a. Let Pk be ToString(k).
// This is implicit for LHS operands of the in operator
// b. Let kPresent be the result of calling the HasProperty internal method of O with argument Pk.
// This step can be combined with c
// c. If kPresent is true, then
if (Object.prototype.hasOwnProperty.call(O, k)) {
// i. Let kValue be the result of calling the Get internal method of O with argument Pk.
kValue = O[k];
// ii. Call the Call internal method of callback with T as the this value and
// argument list containing kValue, k, and O.
callback.call(T, kValue, k, O);
}
// d. Increase k by 1.
k++;
}
// 8. return undefined
};
}
逐字複製,從MDN forEach()
文章參考(下文); 2013年4月1日,14:30。
參考文獻:
哇,真的很有用的概述。感謝那! –
我看不出爲什麼會有人想要定義一個'actOnGroup'函數,它幾乎與'each' /'forEach'完全相同(唯一不同的是它沒有用,因爲它不會返回原始數組),除了做出一個非常長的回答。 – deviousdodo
它的選項是全部,我更喜歡'forEach'的替代實現,我個人只是簡單地選擇擴展答案,通過展示如何擴展'Object'或'Array'的原型。雖然我承認我通常會返回原始對象(我會立即編輯它)。 –
一個簡單的方法:
var nodes = [node.rectangle1, node.text, node.rectangle2];
for (var i = 0; i < nodes.length; i++) {
nodes[i].toFront();
}
如果你使用underscore和喜歡簡潔:
_.invoke([node.rectangle1, node.text, node.rectangle2], 'toFront');
如果你想返回值可以請使用map或者如果您只想在each上進行一些額外的處理。
EDIT(做出這個完全):
您還可以使用內置的forEach
在一個非常類似的方式(如果你不關心某些瀏覽器或您選擇墊片吧)下劃線each
:
[node.rectangle1, node.text, node.rectangle2].forEach(function(el) {
el.toFront();
});
如果你可以使用下劃線,你可以使用_。map() –
@ user1537158我已經提到過map和each,但沒有提供一個例子,因爲在docs中已經直接給出了一個例子,在這種情況下,'invoke'似乎是他真正想要的。 – deviousdodo
+1 for u @deviousdodo –
- 1. 從功能對象執行的功能
- 2. 上一個功能運行完成後執行一個功能
- 3. SQL grant在多個對象上執行
- 4. 執行多個功能
- 5. 如何在同一個對象上執行多個方法?
- 6. 在功能上對一個項目集合執行命令
- 7. 如何在單個jQuery對象上執行一個函數?
- 8. 自我執行功能對象常量
- 9. C++設計:單一功能執行多項任務VS執行單一任務
- 10. 執行上一個Python對象
- 11. C#,Unity - 具有多個不同對象的單一功能
- 12. 在調用另一個功能之前執行一些功能
- 13. 在單個java.sql.Statement上執行多個DML
- 14. 傳遞對象在JavaScript中的功能(一個功能到另一個功能)
- 15. 完成另一個功能後執行一個功能
- 16. jquery對象執行對象的指定功能
- 17. 多功能執行與require_once
- 18. 可能在API上執行功能?
- 19. 綁定功能,所以當一個執行另一個執行
- 20. 訂單執行specflow功能
- 21. 並行執行多個對象方法
- 22. 如何在SQL中使用變量在一列上執行多個功能?
- 23. 如何在另一個功能完成後執行功能?
- 24. 如何在完成第一個功能後執行功能?
- 25. 上執行execlp功能
- 26. 應用功能將多個對象
- 27. CODE - 執行某個功能後對象的內容被更改
- 28. 使用多功能對象
- 29. 單個對象的ng-repeat功能
- 30. Sapui5:我如何在OPA5上執行一個動作然後執行功能?
如何選擇各種'node.rectangle'元素/對象? –
矩形的各種元素與問題無關,我只想合併這些對象。更新了問題,參見上文。 –
這非常相關,因爲'Array'或'Object'原型可以擴展爲在數組或節點List上執行定義的函數。 –