【读书笔记】“Javascript编程精解”之“词典”

看了很多讲解JS的书,个人觉得还是这本讲的生动易解,特别是在“面向对象编程”这章讲的更是“惟妙惟肖”。这本书由世界顶级JavaScript程序员Marijn Haverbeke撰写“Eloquent JavaScript”翻译而来。有兴趣看英文原版的,文章后参考链接有标示。

我们知道,对于对象的属性操作要考虑各方面问题,比如在枚举属性的时候要考虑是否属于当前对象,是否可枚举,如果原型中的hasOwnProperty方法被属性覆盖了怎么办……

书中为我们准备好了操作对象属性的这一“词典”(Dictionary):

//遍历对象属性
function forEachIn(object, action) {
  for (var property in object) {
    if (Object.prototype.hasOwnProperty.call(object, property))
      action(property, object[property]);
  }
}


//Dictionary 词典
function Dictionary(startValues) {
  this.values = startValues || {};
}

Dictionary.prototype.store = function(name, value) {//添加属性
  this.values[name] = value;
};

Dictionary.prototype.lookup = function(name) {      //查找属性值
  return this.values[name];
};

Dictionary.prototype.contains = function(name) {    //检测是否包含某属性
  return Object.prototype.hasOwnProperty.call(this.values, name) &&
    Object.prototype.propertyIsEnumerable.call(this.values, name);
};

Dictionary.prototype.each = function(action) {      //遍历属性
  forEachIn(this.values, action);
};


//实例 eg.
var colours = new Dictionary({Grover: "blue",
                              Elmo: "orange",
                              Bert: "yellow"});
show(colours.contains("Grover"));
show(colours.contains("constructor"));
colours.each(function(name, colour) {
  print(name, " is ", colour);
});

 

 如果仔细阅读这段代码,会觉得“词典”写得有多巧妙了。综合考虑了如上提出的各方面问题。

 

 

 【参考】

 Eloquent JavaScript [英文原版图书]

 本书更新、勘误表、示例代码

 书中代码演示地址

 翻译者:汤姆大叔 博客


阅读本文后,您的心情是:
 
恶心
愤怒
强赞
感动
路过
无聊
雷囧
关注
知识共享许可协议
评论(0) 浏览(3962) 引用(0)
引用地址:http://blog.baiwand.com/tb.php?sc=e03ecc&id=179
Tags:
« 【翻译】CSS3媒体查询(CSS3 Media Queries) 【分享】Javascript之cookie操作 »

Blogger

  • blogger
  • 天之骄子
  • 职位:研发工程师
    铭言:
    阳光与欢乐同在,
    与我同在
    主页:
    blog.baiwand.com

分类目录

日志归档

主题标签

数据统计

  • 日志:151篇
  • 评论:45条
  • 碎语:264条
  • 引用:0条

链接表

随机日志 »

最新日志 »

最新评论 »

标签云 »

订阅Rss
sitemap