扩充类型的功能

扩充类型的功能

Javascript允许给语言的基本类型扩充功能。我们把方法加在基本类型的prototype上,使得该方法对所有对象可用。这种方式对函数、数组、字符串、数字、正则表达式和布尔值同样适用。

下面我们以以函数为例,通过给Function.prototype增加方法来使得该方法对所有函数可用:

这个方法用于提取数字的整数部分

Number.prototype.integer = function() {
  console.log(this);
  return Math[this < 0 ? "ceil" : "floor"](this);
};
console.log((10 / 3).integer());  // 3

我们也可以像下面这样, 写一个通用的方法,就不需要每次都打 .prototype...

Function.prototype.method = function(name, func) {
  this.prototype[name] = func;
  return this;
};

Number.method("integer", function() {
  return Math[this < 0 ? "ceil" : "floor"](this);
});
(-10 / 3).integer();  // -3

通过给基本类型增加方法,可以极大的提高语言的表现力。因为JavaScript原型继承的动态本质,新的方法立刻被赋予到所有的对象实例上, 哪怕对象实例是在方法被增加之前就已经创建好了

由于基本类型的原型是公用结构, 所以在类库混用的要先判断该方法是否存在, 以免覆盖

Function.prototype.method = function(name, func) {
  if (!this.prototype[name]) {
    this.prototype[name] = func;
  }
  return this;
};

参考

  • [《JavaScript语言精粹-第四章-扩充基本类型的功能》]
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容