JavaScript设计模式——(1)灵活的JavaScript(使用真假对象)

从一个验证函数开始

要求:用js创建一个函数,用于验证名字、邮箱、密码等

一、简单创建

var checkName = funtion(){
	//验证名字
}
var checkEmail = funtion(){
	//验证邮箱
}
var checkPwd = funtion(){
	//验证密码
}

创建函数的时候,分别用变量保存,但是创建的全部都是全局变量,很容易因为别人创建的相同的方法名而冲突,团队成员相互影响。

二、用一个对象保存

将上面的方法进行优化,将所有的方法放在一个对象里面保存

     var CheckObject1 = function () {
        return {
          // 每次返回都会返回一个新的对象,让对象之间相互不影响
          checkName: function () {
            console.log("验证名字成功");
          },
          checkEmail() {
            console.log("验证邮箱成功");
          },
          checkPassword() {
            console.log("验证密码成功");
          },
        };
      };
      
      var a = CheckObject1();
      a.checkEmail();

用以上创建方法,别人每次创建对象的时候都会return一个新的对象,防止别人每次使用的时候产生冲突。

三、类也可以

以上方法,可以用类的方法进行替代,也会产生相同效果。

      var CheckObject = function () {};

      CheckObject.prototype.checkName = function () {
        console.log("验证名字成功");
        return this; // 添加此行代码之后,可以通过链式调用
      };
      CheckObject.prototype.checkEmail = function () {
        console.log("验证邮箱成功");
        return this; // 添加此行代码之后,可以通过链式调用
      };
      CheckObject.prototype.checkPwd = function () {
        console.log("验证密码成功");
        return this; // 添加此行代码之后,可以通过链式调用
      };

      // 1.普通调用
      var a = new CheckObject();
      a.checkName();
      // 2.链式调用:上面每一个方法都return this
      // a.checkEmail().checkPwd().checkName();

书写每一个方法处可以return this,返回的是调用当前方法的对象,故可以用链式方法进行调用。使用 类.prototype.方法 可以实现方法二中的效果。

上面代码与以下的代码等价:

      var CheckObject = function () {};

      CheckObject.prototype = {
        checkEmail: function () {
          console.log("CheckObject1验证邮箱成功");
          rethrn this;
        },
        checkPwd: function () {
          console.log("CheckObject1验证密码成功");
          rethrn this;
        },
        // checkName()方法省略
      };
      var b = new CheckObject();
      b.checkEmail();

四、链式添加方法

// 1.addMethod用于添加新的方法
Function.prototype.addMethod = function (name, fn) {
        this[name] = fn;
        return this;
      };
      // 2.链式添加方法
      var methods = function () {};

      methods
        .addMethod("checkName", function () {
          console.log("验证姓名成功");
          return this;
        })
        .addMethod("checkEmail", function () {
          console.log("验证邮箱成功");
          return this;
        });
        // 3.输出
      console.log("====链式添加方法====");
      methods.checkEmail().checkName();

以上方法还可以将methods更改成Methods,创建的时候先new一个Method对象,在调用该对象进行调用方法。具体方法可以查看《JavaScript设计模式》。(本书内容也参考自此书)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值