成长脚印-专注于互联网发展
【读书笔记】“Javascript编程精解”之“词典”
post by:天之骄子 2013-6-25 22:14

看了很多讲解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 [英文原版图书]

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

 书中代码演示地址

 翻译者:汤姆大叔 博客

评论:
发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容