JavaScript多灵活?

JavaScript 是一种灵活的语言,表达力极强,我来举一个例子,保证让很多人大吃一惊。

本文受到了 Kyle Simpson 的文章《Iterating ES6 Numbers》的启发。

首先,在 Number.prototype 对象上,部署一个 add 方法。

Number.prototype.add = function (x) {
  return this + x;
};

上面代码为 Number 的实例定义了一个 add 方法。(如果你对这种写法不熟悉,建议先阅读我写的《JavaScript 面向对象编程》。)

由于 Number 的实例就是数值,在数值上调用某个方法,数值会自动转为实例对象,所以就得到了下面的结果。

8['add'](2)
// 10

上面代码中,调用方法之所以写成8['add'],而不是8. add,是因为数值后面的点,会被解释为小数点,而不是点运算符。

将数值放在圆括号中,就可以使用点运算符调用方法了。

(8) .add (2)
// 10

其实,还有另一种写法。

8..add (2)
// 10

上面代码的第一个点解释为小数点,第二个点解释为点运算符。为了语义清晰起见,下面我统一采用圆括号的写法。

由于 add 方法返回的还是数值,所以可以链式运算。

Number.prototype.subtract = function (x) {
  return this - x;
};

(8) .add (2) .subtract (4)
// 6

上面代码在 Number 对象的实例上部署了 subtract 方法,它可以与 add 方法链式调用。

如果使用方括号调用属性,写法会很古怪。

8["add"](2)["subtract"](4)
// 6

我们还可以部署更复杂的方法。

Number.prototype.iterate = function () {
  var result = [];
  for (var i = 0; i <= this; i++) {
    result.push (i);
  }
  return result;
};

(8) .iterate ()
// [0, 1, 2, 3, 4, 5, 6, 7, 8]

上面代码在 Number 对象的原型上部署了 iterate 方法,可以将一个数值自动扩展为一个数组。

总之,现在我们可以在数值上直接调用方法了,但是后面一对圆括号看着有点碍眼,有没有可能去掉圆括号呢?也就是说,能不能将下面的表达式

(8).double() .square ()

写成另一种样子?

(8).double.suqare

这是可以做到的。

ES5 规定,每个对象的属性都有一个取值方法 get,用来自定义该属性的读取操作。

Number.prototype = Object.defineProperty (
  Number.prototype, "double", {
    get: function (){return (this + this)}
  }
);

Number.prototype =  Object.defineProperty (
  Number.prototype, "square", {
    get: function (){return (this * this)}
  }
);

上面代码在 Number.prototype 上定义了两个属性 double 和 square ,以及它们的取值方法 get 。

因此,在任一数值上,读取这两个属性,就可以写成下面的样子。

(8).double.square
// 256

也可以改用方括号运算符。

8["double"]["square"]
// 256

【编辑推荐】

作者:阮一峰

来源:51CTO

时间: 2024-11-05 12:20:57

JavaScript多灵活?的相关文章

(Javascript)prototype的一个优势也是缺点

javascript  如何在Javascript实现OO编程?恐怕最好的方式就是充分利用prototype属性.关于prototype的介绍有很多,我就不赘述了.比较基本的原理是,当你用prototype编写一个类后,当你new一个新的object,浏览器会自动把prototype中的内容替你附加在object上.这样,通过利用prototype,你也就实现了类似OO的Javascript. 在Javascript中,object就是一个associative array.一个function

JavaScript编程语言的编码规范

网页制作Webjx文章简介:对于熟悉 C/C++ 或 Java 语言的工程师来说,JavaScript 显得灵活,简单易懂,对代码的格式的要求也相对松散.很容易学习,并运用到自己的代码中.也正因为这样,JavaScript 的编码规范也往往被轻视,开发过程中修修补补,最终也就演变成为后续维护人员的恶梦.软件存在 对于熟悉 C/C++ 或 Java 语言的工程师来说,JavaScript 显得灵活,简单易懂,对代码的格式的要求也相对松散.很容易学习,并运用到自己的代码中.也正因为这样,JavaSc

用javascript实现人工智能脚本

javascript|脚本  最近在网上偶然看到一篇文章,说javascript = C+Lisp,于是思考这样的问题,既然javascript包含着部分Lisp的血统,那么用javascript来实现一个类似于Lisp的人工智能脚本又会是什么样子? LISt Processing语系作为一种"函数式"语系,自从诞生之日起便以其简单优美的风格和简洁高效的结构征服了许许多多的研究者和爱好者. 目前这种古老的语言和文法仍然被许许多多的人使用着并热爱着,而且在人工智能等领域发挥着非常巨大的作

JavaScript脚本编写规范

对于熟悉 C/C++ 或 Java 语言的工程师来说,JavaScript 显得灵活,简单易懂,对代码的格式的要求也相对松散.很容易学习,并运用到自己的代码中.也正因为这样,JavaScript 的编码规范也往往被轻视,开发过程中修修补补,最终也就演变成为后续维护人员的恶梦.软件存在的长期价值直接与编码的质量成比例.编码规范能帮助我们降低编程中不必要的麻烦.而 JavaScript 代码是直接发送给客户浏览器的,直接与客户见面,编码的质量更应该受到关注.  本文浅谈 JavaScript 编程中

javascript中的编程语言如何编码规范

对于熟悉 C/C++ 或 Java 语言的工程师来说,javascript 显得灵活,简单易懂,对代码的格式的要求也相对松散.很容易学习,并运用到自己的代码中.也正因为这样,javascript 的编码规范也往往被轻视,开发过程中修修补补,最终也就演变成为后续维护人员的恶梦.软件存在的长期价值直接与编码的质量成比例.编码规范能帮助我们降低编程中不必要的麻烦.而 javascript 代码是直接发送给客户浏览器的,直接与客户见面,编码的质量更应该受到关注. 本文浅谈 javascript 编程中关

Javascript调用函数方法的几种方式介绍

 这篇文章主要介绍了Javascript调用函数方法的几种方式介绍,本文讲解了func().(function(arg){})(window).func.bind(sth)().func.call().func.apply()等5种方式,需要的朋友可以参考下     javascript语法灵活,同一个功能有五六种实现方式并不罕见,然后再加上有些反人类的原型继承和异步特性,就更让人一头雾水了.我经常搞不清楚call,apply之间的区别,今天就记录一下,以免再忘了. 在javascript中,方

浅谈JavaScript编程语言的编码规范_基础知识

JavaScript 编程语言作为最流行的客户端脚本语言,早已被众多 Web 开发人员所熟悉.随着 Web2.0 时代的到来和 Ajax 技术的广泛应用,JavaScript 也逐渐吸引着更多的视线.工作中要求越多的是对 JavaScript 语言的深入学习,灵活运用,和对编码质量的保证. 对于熟悉 C/C++ 或 Java 语言的工程师来说,JavaScript 显得灵活,简单易懂,对代码的格式的要求也相对松散.很容易学习,并运用到自己的代码中.也正因为这样,JavaScript 的编码规范也

《JavaScript设计模式》——2.3 传宗接代——继承

2.3 传宗接代--继承 "小白,看继承呢?"小铭忙完自己的事情走过来. "是呀,刚才学习类,发现每个类都有3个部分,第一部分是构造函数内的,这是供实例化对象复制用的,第二部分是构造函数外的,直接通过点语法添加的,这是供类使用的,实例化对象是访问不到的,第三部分是类的原型中的,实例化对象可以通过其原型链间接地访问到,也是为供所有实例化对象所共用的.然而在继承中所涉及的不仅仅是一个对象." "对呀,不过继承这种思想却很简单,如千年文明能够流传至今靠的就是传承

JavaScript编程语言排版、命名、声明、语句的编码规范

问题描述 JavaScript编程语言作为最流行的客户端脚本语言,深受Web开发人员爱戴.JavaScript语法灵活,简单易懂,对代码的格式的要求也相对松散.也正因为如此,JavaScript的编码规范也往往被轻视,开发过程中修修补补,最终也就演变成为后续维护人员的恶梦.为了此种恶梦不再发生,IBM高级软件工程师王丹丹对JavaScript编程语言的编码规范进行了总结,现转载于此,供大家学习.全文如下:对于熟悉C/C++或Java语言的工程师来说,JavaScript显得灵活,简单易懂,对代码