`
Hooopo
  • 浏览: 330721 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Function and Block

阅读更多
js:
var block = function(arg){ alert(arg) };
var func = function(arr,blck){
  for (var i in arr){
    blck(arr[i]);
  }
};

func([1,2,3],block);

ruby:
class Array
  def my_each
    if block_given?
      yield(self)
    else
      raise ArgumentError
    end
  end
end
[1,2,3].my_each{|i| puts i}



当然ruby自带的each map是很方便的..
[1,2,3].each{|i| puts i}

2
2
分享到:
评论
13 楼 鹤惊昆仑 2010-01-31  
for (var i in arr) 这个js在IE浏览器中不行。
12 楼 qichunren 2009-10-23  
我再来踩一脚
11 楼 Hooopo 2009-10-14  
全冠清 写道
 

被谁踩了一脚。。。一定是你干的
10 楼 全冠清 2009-10-14  
 
9 楼 Hooopo 2009-10-12  
全冠清 写道
Hooopo 写道
全冠清 写道
Array.prototype.each=function(fun){
			for(var i=0;i<this.length;i++){  
                fun(i,this[i])
			} 
		}
		var array=[1,2,3]
		array.each(function(m,n){
			alert(m+":"+n)
		})

这样写貌似更像block..

这样写的话就更OO一些了..不过还是要自己加..很麻烦,js让人不爽的地方就是屁大点的功能都要自己写,感觉回到了c时代...而ruby内建了很多常用的方法,你想要什么就有什么.比如这些:
 Enumerable(all?, any?, collect, detect, each_cons, each_slice,
 each_with_index, entries, enum_cons, enum_slice, enum_with_index,
 find, find_all, grep, include?, inject, inject, map, max, member?,
 min, partition, reject, select, sort, sort_by, to_a, to_set, zip)


还有这些:
Instance methods:
-----------------
     &, *, +, -, <<, <=>, ==, [], []=, abbrev, assoc, at, clear,
     collect, collect!, compact, compact!, concat, dclone, delete,
     delete_at, delete_if, each, each_index, empty?, eql?, fetch, fill,
     first, flatten, flatten!, frozen?, hash, include?, index, indexes,
     indices, initialize_copy, insert, inspect, join, last, length, map,
     map!, nitems, pack, pop, pretty_print, pretty_print_cycle, push,
     quote, rassoc, reject, reject!, replace, reverse, reverse!,
     reverse_each, rindex, select, shift, size, slice, slice!, sort,
     sort!, to_a, to_ary, to_s, to_yaml, transpose, uniq, uniq!,
     unshift, values_at, yaml_initialize, zip, |



这些功能你可以试用下mootools,
引用

forEach  迭代一个数组。这个方法使各个浏览器都能使用forEach这个方法而不需要浏览器原生的对 forEach 的支持。 
filter  实现非原生支持filter的浏览器的filter方法 
map  实现非原生支持 map 的浏览器的filter方法 
every  实现非原生支持every 的浏览器的filter方法 
some  实现非原生支持 some 的浏览器的filter方法 
indexOf  实现非原生支持 indexOf 的浏览器的filter方法 
each  和 Array.forEach方法等同 
copy  返回一个数组的副本 
remove  移除在数组中的和给出值相等的项 
contains  测试数组中是否含有所给出的项 
associate  传入一个作为键的数组,然后和本数组的值结合产生一个键值对。 
extend  接纳另外一个数组 
merge  和另一个数组合并,重复的项将被替代。 
include  把给出的元素纳入本数组。 
getRandom  在数组中随机选择一个项 
getLast  返回数组中最后一个项 

基本上够用了,不过用到的地方实在不多。

这些东东是有用的,有了这些可以把代码缩短很多,对ruby来说短不短不重要。可读就行了。但是对js来说1k的js代码量和100k的代码量差距还是很大的。。
8 楼 Hooopo 2009-10-12  
多学一门框架是负担.........
7 楼 全冠清 2009-10-12  
Hooopo 写道
全冠清 写道
Array.prototype.each=function(fun){
			for(var i=0;i<this.length;i++){  
                fun(i,this[i])
			} 
		}
		var array=[1,2,3]
		array.each(function(m,n){
			alert(m+":"+n)
		})

这样写貌似更像block..

这样写的话就更OO一些了..不过还是要自己加..很麻烦,js让人不爽的地方就是屁大点的功能都要自己写,感觉回到了c时代...而ruby内建了很多常用的方法,你想要什么就有什么.比如这些:
 Enumerable(all?, any?, collect, detect, each_cons, each_slice,
 each_with_index, entries, enum_cons, enum_slice, enum_with_index,
 find, find_all, grep, include?, inject, inject, map, max, member?,
 min, partition, reject, select, sort, sort_by, to_a, to_set, zip)


还有这些:
Instance methods:
-----------------
     &, *, +, -, <<, <=>, ==, [], []=, abbrev, assoc, at, clear,
     collect, collect!, compact, compact!, concat, dclone, delete,
     delete_at, delete_if, each, each_index, empty?, eql?, fetch, fill,
     first, flatten, flatten!, frozen?, hash, include?, index, indexes,
     indices, initialize_copy, insert, inspect, join, last, length, map,
     map!, nitems, pack, pop, pretty_print, pretty_print_cycle, push,
     quote, rassoc, reject, reject!, replace, reverse, reverse!,
     reverse_each, rindex, select, shift, size, slice, slice!, sort,
     sort!, to_a, to_ary, to_s, to_yaml, transpose, uniq, uniq!,
     unshift, values_at, yaml_initialize, zip, |



这些功能你可以试用下mootools,
引用

forEach  迭代一个数组。这个方法使各个浏览器都能使用forEach这个方法而不需要浏览器原生的对 forEach 的支持。 
filter  实现非原生支持filter的浏览器的filter方法 
map  实现非原生支持 map 的浏览器的filter方法 
every  实现非原生支持every 的浏览器的filter方法 
some  实现非原生支持 some 的浏览器的filter方法 
indexOf  实现非原生支持 indexOf 的浏览器的filter方法 
each  和 Array.forEach方法等同 
copy  返回一个数组的副本 
remove  移除在数组中的和给出值相等的项 
contains  测试数组中是否含有所给出的项 
associate  传入一个作为键的数组,然后和本数组的值结合产生一个键值对。 
extend  接纳另外一个数组 
merge  和另一个数组合并,重复的项将被替代。 
include  把给出的元素纳入本数组。 
getRandom  在数组中随机选择一个项 
getLast  返回数组中最后一个项 

基本上够用了,不过用到的地方实在不多。
6 楼 Hooopo 2009-10-12  
以上纯属这两个星期以来使用js的感受..
5 楼 Hooopo 2009-10-12  
yuan 写道
hooopo 写道
当然ruby自带的each map是很方便的..
[1,2,3].each{|i| puts i}


JavaScript1.6 (FF、Chrome)的数组也有这个:

javascript:[1,2,3,4,5].forEach(function(item, index, arr){alert('['+arr+']:'+index+'='+item)});void(0);

还提供了一个Array.forEach,一般用于操作类似数组的对象,比如arguments。
function iterateArgument(){
 Array.forEach(arguments, function(arg, index, args){
  alert(args+':'+index+'='+arg);
 });
}

iterateArgument(1,2,3,4);
iterateArgument('a',2,true);

还有跨浏览器的问题..想要写出好的js代码必须要熟悉各大浏览器的一些东东..
4 楼 Hooopo 2009-10-12  
全冠清 写道
Array.prototype.each=function(fun){
			for(var i=0;i<this.length;i++){  
                fun(i,this[i])
			} 
		}
		var array=[1,2,3]
		array.each(function(m,n){
			alert(m+":"+n)
		})

这样写貌似更像block..

这样写的话就更OO一些了..不过还是要自己加..很麻烦,js让人不爽的地方就是屁大点的功能都要自己写,感觉回到了c时代...而ruby内建了很多常用的方法,你想要什么就有什么.比如这些:
 Enumerable(all?, any?, collect, detect, each_cons, each_slice,
 each_with_index, entries, enum_cons, enum_slice, enum_with_index,
 find, find_all, grep, include?, inject, inject, map, max, member?,
 min, partition, reject, select, sort, sort_by, to_a, to_set, zip)


还有这些:
Instance methods:
-----------------
     &, *, +, -, <<, <=>, ==, [], []=, abbrev, assoc, at, clear,
     collect, collect!, compact, compact!, concat, dclone, delete,
     delete_at, delete_if, each, each_index, empty?, eql?, fetch, fill,
     first, flatten, flatten!, frozen?, hash, include?, index, indexes,
     indices, initialize_copy, insert, inspect, join, last, length, map,
     map!, nitems, pack, pop, pretty_print, pretty_print_cycle, push,
     quote, rassoc, reject, reject!, replace, reverse, reverse!,
     reverse_each, rindex, select, shift, size, slice, slice!, sort,
     sort!, to_a, to_ary, to_s, to_yaml, transpose, uniq, uniq!,
     unshift, values_at, yaml_initialize, zip, |


3 楼 yuan 2009-10-12  
hooopo 写道
当然ruby自带的each map是很方便的..
[1,2,3].each{|i| puts i}


JavaScript1.6 (FF、Chrome)的数组也有这个:

javascript:[1,2,3,4,5].forEach(function(item, index, arr){alert('['+arr+']:'+index+'='+item)});void(0);

还提供了一个Array.forEach,一般用于操作类似数组的对象,比如arguments。
function iterateArgument(){
 Array.forEach(arguments, function(arg, index, args){
  alert(args+':'+index+'='+arg);
 });
}

iterateArgument(1,2,3,4);
iterateArgument('a',2,true);
2 楼 全冠清 2009-10-11  
Array.prototype.each=function(fun){
			for(var i=0;i<this.length;i++){  
                fun(i,this[i])
			} 
		}
		var array=[1,2,3]
		array.each(function(m,n){
			alert(m+":"+n)
		})

这样写貌似更像block..
1 楼 全冠清 2009-10-11  
$.each???

相关推荐

Global site tag (gtag.js) - Google Analytics