javascript 面向对象技术

2018-08-11  本文已影响0人  ZhiPengTu

javascript类的实现:

1.集合类

set.js

function Set() {//这设计一个构造函数
    this.values = {};//集合数据保存在对象的属性里
    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.values.hasOwnProperty(str)) {
            this.values[str] = val;
            this.n++;
        }
    }
    return this;
};
//从集合当中删除元素,元素由参数指定
Set.prototype.remove = function f() {
    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;
};
//这里声明的是一个内部函数,用来将任意javascript值和唯一的字符串对应起来


Set._v2s = function (val) {
    switch (val) {
        case undefined:
            return 'u';
        case null:
            return 'u';
        case true:
            return 't';
        case false:
            return 'f';
        default:
            switch (typeof val) {
                case 'number':
                    return '#' + val;
                case 'string':
                    return '""' + val;
                default:
                    return '@' + objectID(val);
            }
    }
    function objectID(o) {
        var prop="|**object**|";
        if(!o.hasOwnProperty(prop)){
            o[prop]=Set._v2s().next++;
            return o[prop];
        }
    }

};
//设置一个初始id的值

Set._v2s.next=100;

送人玫瑰,手留余香。

上一篇 下一篇

猜你喜欢

热点阅读