python enumeration_枚举类型 实现一个enumeration对于类的加工的函数

枚举类型

枚举类型是一种类型,是值的有限集合。如果值定义为这个类型为可列出的(可枚举的)的。

为一个构造函数enumeration

实现enumeration对于类的加工的函数

思路,这个和工厂类不一样的地方在于是对其函数直接更改,注意返回值是函数本身,由于函数用完即销毁(没有引用)所以对于函数的更改不会影响下一个

/*

* enumeration.js文件

* 2018年07月20日 02:31

*/

// 这个函数创建一个新的枚举类型,实参对象表示类的每个实例的名字和值(即传入的是一个集合,该集合是名字和值的键值对)

// 返回值是一个构造函数

// 类似于工厂函数,不过这个工厂函数加工的对象是构造函数

// 这个构造函数会抛出异常:不能使用它来创建该类型的新实例

// 返回构造函数包含名/值对的映射表

// 包括由值组成的数组,以及一个foreach()迭代器函数

function enumeration(namesToValues) {

// 这个虚拟构造函数是返回值

var enumeration = function(){ throw "can't Instantiate Enumerations"; };

// 枚举值继承自这个对象

var proto = enumeration.prototype = {

constructor: enumeration, // 说明该函数是由enumeration为原型创建的

toString: function(){ return this.name; }, // 返回名字

valueOf: function(){ return this.value; }, // 返回值

toJSON: function(){ return this.name; }, // 转换为JSON

};

enumeration.values = []; // 用来存放枚举对象的数组

// 现在创建新类型的实例

for (name in namesToValues) { // for/in循环遍历每个值

var e = Object.create(proto) // 创建一个代表它的对象

e.name = name; // 给他一个名字

e.value = namesToValues[name]; // 给他一个值

enumeration[name] = e; // 将它设置为构造函数的属性

enumeration.values.push(e); // 将其储存到值数组中,即保存进上个创建的values的对象中

};

// 一个类方法,用来对类的实例进行迭代

enumeration.foreach = function(f, c) {

for(var i = 0; i < this.values.length; i++) f.call(c, this.values[i]) // 每次循环调用

};

// 返回标识这个新类型的构造函数

return enumeration;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值