国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

JavaScript鏈?zhǔn)秸{(diào)用計(jì)算器

2019-11-14 09:40:16
字體:
供稿:網(wǎng)友

一個(gè)經(jīng)典的鏈?zhǔn)秸Z法計(jì)算器用起來會(huì)像是這樣:

FluentCalculator.one.plus.two // 1 + 2 = 3FluentCalculator.one.plus.two.plus.three.minus.one.minus.two.minus.four //  -1FluentCalculator.one.plus.ten - 10 // 1 + 10 - 10 = 1如果異常地調(diào)用,就會(huì)返回undefined:

FluentCalculator.one.one // undefined,因?yàn)橹挡荒苷{(diào)用值FluentCalculator.one.plus.plus // undefined,操作不能連續(xù)調(diào)用對于這個(gè)問題,我們得確定一個(gè)思路:有狀態(tài)在各個(gè)調(diào)用間傳遞,而且是兩種狀態(tài)。

當(dāng)值(num)調(diào)用結(jié)束時(shí),返回的是操作狀態(tài)對象(OPRStatus)。

當(dāng)操作(opr)調(diào)用結(jié)束時(shí),返回的是值狀態(tài)對象(NumStatus)。

也就是說,這兩種狀態(tài)是交替的,如果沒有交替,那就是異常地調(diào)用,就會(huì)返回undefined。

"use strict";var num = ["zero","one","two","three","four","five","six","seven","eight","nine","ten"];var oprs = {plus : "+",minus : "-",times : "*",dividedBy : "/"};var Magic = {};//狀態(tài)對象,父對象function Status(value,opr){	//當(dāng)前運(yùn)算結(jié)果    this.value = value;	//當(dāng)前操作符    this.opr = opr;}//值狀態(tài)對象,繼承狀態(tài)對象function NumStatus(value,opr){    Status.call(this,value,opr);}//操作狀態(tài)對象,繼承狀態(tài)對象function OprStatus(value,opr){    Status.call(this,value,opr);}//給值狀態(tài)對象原型上綁定方法for(let i=0;i<num.length;i++){    Object.defineProperty(Magic,num[i],{        get : function(){              var val;            if(!this.opr){                val = i;            }            else{                              switch(this.opr){                    case "+":val = this.value + i;break;                    case "-":val = this.value - i;break;                    case "*":val = this.value * i;break;                    case "/":val = this.value / i;break;                }            }			//返回操作狀態(tài)對象            return new OprStatus(val,null);        }    });}//給操作狀態(tài)對象原型上綁定方法for(let i in oprs){    if(oprs.hasOwnProperty(i)){        Object.defineProperty(OprStatus.prototype,i,{            get : function(){				//返回值狀態(tài)對象                return new NumStatus(this.value,oprs[i]);            }        });    }}var FluentCalculator = Magic;NumStatus.prototype = Magic;//所有調(diào)用結(jié)束時(shí),就會(huì)調(diào)valueOf打印,直接返回最終運(yùn)算結(jié)果OprStatus.prototype.valueOf = function(){    return this.value;};


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 和林格尔县| 贡觉县| 大邑县| 佳木斯市| 崇左市| 芦溪县| 寻甸| 鄂托克旗| 句容市| 河源市| 洛浦县| 丽江市| 蕲春县| 泰顺县| 平武县| 达日县| 义马市| 大关县| 肥西县| 广平县| 惠水县| 巴林左旗| 嘉黎县| 新民市| 兴山县| 桐乡市| 宁化县| 临沭县| 石景山区| 专栏| 禄丰县| 莱州市| 龙川县| 崇文区| 佛冈县| 什邡市| 延川县| 三原县| 衡阳县| 嘉鱼县| 淮北市|