我是靠谱客的博主 欣喜百褶裙,最近开发中收集的这篇文章主要介绍【09类和模块】——6:javascript中的面向对象技术(集合类),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在这里我会总结一些实际的例子,包括如何利用javascript总的类进行编程

——集合类
集合是一种数据结构,用以表示非重复值的无序集合。集合的基础方法包括添加值和检测值是否在集合中,这种集合需要一种通用的实现,以保证效率。
javascript的对象是属性名以及对应的值的基本集合,因此将对象只用作字符串的集合就大材小用了。

下面的例子实现了一个set类,它实现了从javascript值到唯一字符串的映射,然后将字符串用作属性名。

//Set.js 值得任意集合
function Set(){         //这是一个构造函数
    this.value={};         //集合数据保存在对象的属性里
    this.n=0;              //集合中值的个数
    this.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.hasOwnProperty(str)){
            this.values[str]=val;
            this.n++
        }
    }
    return this; //支持链式调用
}
//从集合删除元素,这些元素有参数指定
Set.prototype.remove=function(){
    for(var i=0;i<arguments.length;i++){
        var str = Set._v2s(arguments[i]);
        if(this.values.hasOwnProperty(str)){
            delete this.values[str];
            this n--
        }
    }
    return this;
}
//如果集合中包含这个值就返回true,否则返回false
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])
    }
}

下面是一个内部函数,用以将任意javascript值和唯一字符串对应起来

Set._v2s = function(val) {
    switch(val) {
        case undefined:     return 'u'; //特殊的原始值        
        case null:          return 'n';  //值只有一个字母      
        case true:          return 't';  //代码       
        default: switch(typeof val) {
            case 'number':  return '#' + val; //数字都带有#前缀  
            case 'string':  return '"' + val; //字符串都带有“前缀  
            default: return '@' + objectId(val); 
        }
        function objectId(o) {
        var prop = "|**objectid**|"; //私有属性,用以存放id 
        if (!o.hasOwnProperty(prop)) //如果对象没有id  
            o[prop] = Set._v2s.next++; //将下一个值赋给它
            return o[prop];      //返回这个id  
        }
    }
/*
对任意对象来说,都会返回一个字符串
针对不同的对象,这个函数会返回不同的字符串
对于同一个对象的多次调用,总是返回字符串
为了做到这一点,它给o创建一个属性,在ES5中,这个属性是不可枚举且是只读的
*/
 Set._v2s.next = 100;//设置初始id的值

最后

以上就是欣喜百褶裙为你收集整理的【09类和模块】——6:javascript中的面向对象技术(集合类)的全部内容,希望文章能够帮你解决【09类和模块】——6:javascript中的面向对象技术(集合类)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部