2012-04-05 184 views
-1

有了像ES5-Shim这样的库,我们现在可以使用新的热度。阵列上的许多方法(如forEach,map,every等)可以使用现在写出干净漂亮的代码。ES5提供的新方法的实际用途是什么?

我想列出一个实际使用的列表,我现在可以使用与这些新方法在使用当前浏览器的API(如DOM)或仅使用javascript时使用。

我说的这种:

var nodes = document.getElementsByClassName('class') 
[].forEach.call(nodes, callback) 
function callback(node) { 
    console.log(node) 
} 

又如从@Esailija

[].filter.call(document.myform.elements, function(input){ 
    return input.type == "text"; 
}); 

这就是我要找的那种实用的。我可以在真实项目中使用某种模式。

+3

伙计,你的分号在哪里? ':P' – 2012-04-05 13:33:18

+0

[矢量编程](http://en.wikipedia.org/wiki/Array_programming)和更多的声明性语法由ES5功能提供。我建议阅读[MDN](https://developer.mozilla.org/en/JavaScript/Reference)。 – zzzzBov 2012-04-05 13:34:22

+1

@ŠimeVidas我烧了他们,烧了他们全部 – Raynos 2012-04-05 13:34:27

回答

2

你真的可以使用的第一件事是我认为bind()方法。

var o = { 
    act: function() { ...} 
} 
// Instead of 
element.addEventListener("type", function(){ o.act(); }, false) 
// you can write 
element.addEventListener("type", o.act.bind(o), false) 

这在名称空间模块中非常有用,其中this就是一切。

数组迭代器方法在涉及数据处理时非常有用。没有具体的例子。

2

您可以使用迭代器函数来操纵列表。

所以在你用while或while循环之前,现在你使用了函数。

function isTextNode(node) { 
    return node.nodeType === Node.TEXT_NODE 
} 

function extractText(node) { 
    return node.data 
} 

function combineText(memo, text) { 
    return memo += text 
} 

var text = toArray(nodeList).filter(isTextNode).map(extractText).reduce(combineText) 

为了适应“如何或为何这是有用的”停止使用/,而并认为您的数据集或列表的,想想你会如何筛选/地图/减少这些列表中提取数据。

另外做一个练习,不要使用闭包,并让你的迭代器函数独立并且不会超过upvalues。

相关问题