需要注意的是正则有2种创建形式:字符串字面量和new RegExp()
的方式.由于RegExp的构造函数是字符串,所以某些情况下需要进行双重转义.
__PROTO__
__proto__
使得继承变得更加容易:
function Super(){}; function Sub(){}; Sub.prototype.__proto__ = Super.prototype;
这是一个非常有用的特性,可以免去如下的工作:
借助中间构造器
无需引入第三方模块来进行基于原型继承的声明
访问器
可以调用方法来定义属性,如其名有:__defineGetter__
、__defineSetter__
。例如为Date
对象定义一个ago的属性,返回以自然语言描述的日期间隔(例如:某件事发生在3秒之前)。例如:
Date.prototype.__defineGetter__('ago',function(){ var diff = ((Date.now() - this.getTime()) / 1000) day_diff = Math.floor(diff / 86400) return day_diff == 0 && (diff < 60 && 'just now' ) || diff < 120 && '1 minute ago' || diff < 3600 && Math.floor(diff / 60) + 'minutes ago' || diff < 7200 && '1 hour ago' || diff < 86400 && Math.floor(diff / 3600) + 'hours ago' || day_diff == 1 && 'Yesterday' || diff < 7 && day_diff + ' days ago' || Math.ceil(day_diff / 7) + ' weeks ago' }) var d = new Date('12/12/1990') console.log(d.ago)