电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

JavaScript 有多靈活?

瀏覽:2日期:2023-11-21 09:28:11

JavaScript 是一種靈活的語言,表達力極強,我來舉一個例子,保證讓很多人大吃一驚。

本文受到了 Kyle Simpson 的文章《Iterating ES6 Numbers》的啟發。

JavaScript 有多靈活?

首先,在 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

via:ruanyifeng

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 非标压力容器_碳钢储罐_不锈钢_搪玻璃反应釜厂家-山东首丰智能环保装备有限公司 | 微妙网,专业的动画师、特效师、CG模型设计师网站! - wmiao.com 超声波电磁流量计-液位计-孔板流量计-料位计-江苏信仪自动化仪表有限公司 | 上海风淋室_上海风淋室厂家_上海风淋室价格_上海伯淋 | 电机保护器-电动机综合保护器-上海硕吉电器有限公司 | 真空乳化机-灌装封尾机-首页-温州精灌| 双工位钻铣攻牙机-转换工作台钻攻中心-钻铣攻牙机一体机-浙江利硕自动化设备有限公司 | 脱硝喷枪-氨水喷枪-尿素喷枪-河北思凯淋环保科技有限公司 | Safety light curtain|Belt Sway Switches|Pull Rope Switch|ultrasonic flaw detector-Shandong Zhuoxin Machinery Co., Ltd | 不锈钢螺丝 - 六角螺丝厂家 - 不锈钢紧固件 - 万千紧固件--紧固件一站式采购 | 高压分散机(高压细胞破碎仪)百科-北京天恩瀚拓 | 不锈钢管件(不锈钢弯头,不锈钢三通,不锈钢大小头),不锈钢法兰「厂家」-浙江志通管阀 | 长江船运_国内海运_内贸船运_大件海运|运输_船舶运输价格_钢材船运_内河运输_风电甲板船_游艇运输_航运货代电话_上海交航船运 | 橡胶膜片,夹布膜片,橡胶隔膜密封,泵阀设备密封膜片-衡水汉丰橡塑科技公司网站 | 细砂提取机,隔膜板框泥浆污泥压滤机,螺旋洗砂机设备,轮式洗砂机械,机制砂,圆锥颚式反击式破碎机,振动筛,滚筒筛,喂料机- 上海重睿环保设备有限公司 | 烟台金蝶财务软件,烟台网站建设,烟台网络推广 | 深圳高新投三江工业消防解决方案提供厂家_服务商_园区智慧消防_储能消防解决方案服务商_高新投三江 | 电子万能试验机_液压拉力试验机_冲击疲劳试验机_材料试验机厂家-济南众标仪器设备有限公司 | 无线讲解器-导游讲解器-自助讲解器-分区讲解系统 品牌生产厂家[鹰米讲解-合肥市徽马信息科技有限公司] | MVE振动电机_MVE震动电机_MVE卧式振打电机-河南新乡德诚生产厂家 | 齿轮减速马达一体式_蜗轮蜗杆减速机配电机-德国BOSERL齿轮减速电动机生产厂家 | 干洗加盟网-洗衣店品牌排行-干洗设备价格-干洗连锁加盟指南 | 精密模具加工制造 - 富东懿| 深圳货架厂_仓库货架公司_重型仓储货架_线棒货架批发-深圳市诺普泰仓储设备有限公司 | 精密线材测试仪-电线电缆检测仪-苏州欣硕电子科技有限公司 | 全自动过滤器_反冲洗过滤器_自清洗过滤器_量子除垢环_量子环除垢_量子除垢 - 安士睿(北京)过滤设备有限公司 | 泉州陶瓷pc砖_园林景观砖厂家_石英砖地铺石价格 _福建暴风石英砖 | 气力输送设备_料封泵_仓泵_散装机_气化板_压力释放阀-河南锐驰机械设备有限公司 | 托盘租赁_塑料托盘租赁_托盘出租_栈板出租_青岛托盘租赁-优胜必达 | 拉力测试机|材料拉伸试验机|电子拉力机价格|万能试验机厂家|苏州皖仪实验仪器有限公司 | 天津蒸汽/热水锅炉-电锅炉安装维修直销厂家-天津鑫淼暖通设备有限公司 | 工控机-图像采集卡-PoE网卡-人工智能-工业主板-深圳朗锐智科 | 耐酸泵,耐腐蚀真空泵,耐酸真空泵-淄博华舜耐腐蚀真空泵有限公司 精密模具-双色注塑模具加工-深圳铭洋宇通 | 北京中航时代-耐电压击穿试验仪厂家-电压击穿试验机 | CXB船用变压器-JCZ系列制动器-HH101船用铜质开关-上海永上船舶电器厂 | 列管冷凝器,刮板蒸发器,外盘管反应釜厂家-无锡曼旺化工设备有限公司 | 楼承板-钢筋楼承板-闭口楼承板-无锡优贝斯楼承板厂 | 臻知网大型互动问答社区-你的问题将在这里得到解答!-无锡据风网络科技有限公司 | 成都APP开发-成都App定制-成都app开发公司-【未来久】 | 汽车润滑油厂家-机油/润滑油代理-高性能机油-领驰慧润滑科技(河北)有限公司 | 郑州巴特熔体泵有限公司专业的熔体泵,熔体齿轮泵与换网器生产厂家 | 河南卓美创业科技有限公司-河南卓美防雷公司-防雷接地-防雷工程-重庆避雷针-避雷器-防雷检测-避雷带-避雷针-避雷塔、机房防雷、古建筑防雷等-山西防雷公司 |