【js学习笔记-052】js中的面向对象技术------集合类
来源:互联网 发布:幸运抽奖软件 编辑:程序博客网 时间:2024/06/05 06:42
集合类
它是一种数据类型,用以表示非重复值的无序集合。
它的基础方法包括添加值,检测值是否在集合中,这种集合需要一个通用的实现,以保证操作效率。以下实例实现了从javascript值到唯一字符串的映射,然后将这个字符串用做属性。
对象和函数都不具备如此简明可靠的唯一字符串表示。因此集合中的每一个对象或函数都要定义一个唯一的属性标识。
function Set(){
this.values = {}; //集合对象保存在对象的属性里
this.n = 0; //集合中对象的个数
this.prototype.add.apply(this,arguments);
}
Set.prototype.add = function(){
for(var i=0;i<arguments.length;i++){
var val = arguments[i];
var str = Set._v2s(val); //将参数转换为字符串
if(!this.values.hasOwnProperty(str)){//集合的值集中没这个key则添加key及key对应的值
this.values[str] = val;
this.n++
}
}
return this; //支持链式方法调用
}
Set.prototype.remove = function(){
var val = arguments[i];
var str = Set._v2s(val); //将参数转换为字符串
if(this.values.hasOwnProperty(str)==true){ //集合的值集中没这个key则添加key及key对应的值
delete this.values[str];
this.n--;
}
}
return this; //支持链式方法调用
}
Set.prototype.contains = function(value){
return this.values.hasOwnProperty(Set._v2s(value));
}
Set.prototype.size = function(){
return this.n;
}
//遍历集合中的所有元素,在指定的上下文中调用f
Set.prototype.foreach = function(f,context){
for(var s in this.values){
if(this.values.hasOwnProperty(s)){
f.call(context,this.values[s]);
}
}
}
Set._v2s = function(val){
switch(val){
case undefined: return 'u';
case null: return 'n';
case true: return 't';
case false: return 'f';
default: switch(typeof val){
case 'number':return '#'+val;
case 'string':return '"'+val;
default:return '@'+objectId(val); //obj和func
}
}
//object 时返回的
//不同对象返回不同字符串,同一对象总是返回相同字符
function objectId(o){
var prop = "|**objectid**|";
if(!o.hasOwnProperty(prop)){
o[prop] = Set._v2s.next++;
}
return o[prop]; //返回这个id
}
}
Set._v2s.next=100; //设置id从100开始
- 【js学习笔记-052】js中的面向对象技术------集合类
- 【js学习笔记-053】js中的面向对象技术------枚举类型
- js面向对象学习笔记
- js面向对象学习笔记之一(类与对象)
- js中的面向对象
- js中的面向对象
- js中的面向对象
- js学习笔记-面向对象程序设计
- JS面向对象学习笔记(一)
- JS面向对象学习笔记(二)
- JS面向对象学习笔记(三)
- 【JS学习笔记】 面向对象与原型
- js学习笔记(面向对象)
- JS学习笔记(10)面向对象
- JS学习笔记2_面向对象
- js笔记--面向对象
- JS笔记:面向对象
- JS面向对象学习
- 一道绝妙的查找题
- EclipseRCP开发2-建立菜单
- HTML基础之<head>篇
- 【OSDBA】系统用户如何以操作系统认证方式登录数据库
- poj_1328_Radar Installation(区间贪心)
- 【js学习笔记-052】js中的面向对象技术------集合类
- Android自定义带标题边框的Layout
- 2013年最新最热播的电影 合集
- UVA 10870 Recurrences 矩阵快速幂
- HTML基础之<head>篇
- [英国][记录][战争中的世界:二战全史(26集)][BD-MKV/58G][中英双字][经典收藏]
- HTML基础之<head>篇
- iOS动画一点也不神秘————你是喜欢看幻灯片?还是看高清电影?
- 常见问题