2.构造函数模式

设计模式并非是难以理解, 或是难以应用到实践中的, 相反的, 设计模式恰恰代表了某些场景下的最佳实践! 这些设计模式通常被有经验的开发者们所采用。
设计模式是开发者们在开发过程中面临的一般问题的解决方案。 这些解决方案是众多开发者们经过长时间的实验和错误所总结出来的
本文将讲解前端 (javascript) 的设计模式概念!


构造函数用于特定类型的对象, 不仅声明了使用的对象, 构造函数还可以接收参数以便第一次创建对象的时候设置对象的成员值, 要注意的是构造函数模式所生成实例的属性和方法都是独立存在的
一个简单的构造函数示例:

function Blog(name) {
  this.name = name;
  this.toName = function() {
    return this.name;
  }
}

或是将方法提出:

function Blog(name) {
  this.name = name;
  this.toName = toName;
}

function toName() {
    return this.name;
}

构造函数的函数名首字母大写, 并且构造函数内部要是完整的, 不要依赖外部属性
以下是一个错误的示例

var name = 'hello world!';
function Blog() {
  this.name = name;
  this.toName = toName;
}

function toName() {
    return this.name;
}

多数构造函数都需要使用new来创建实例, 但有一种方式可以避免使用new来创建, 但是并不建议如此使用, 这样写代码中可能引起歧义

function Blog(name) {
  if (!(this instanceof Blog)) {
    return new Blog(name);
  }
  this.name = name;
  this.toName = toName;
}

function toName() {
    return this.name;
}

加入代码instanceof判断之后, 当直接使用Blog('hello world');时, 也始终返回一个实例
原理是通过判断thisinstanceof是不是Blog来决定返回new Blog还是继续执行代码,如果使用的是new关键字,则(this instanceof Blog)true,会继续执行下面的参数赋值,如果没有用new(this instanceof Blog)就为false,就会重新new一个实例返回。

使用场景

构造函数模式的应用比较广泛, 但不经常单独使用, 一般是与原型模式结合使用, 如包装一个常用的按钮, 这种会重复使用的模块, 只要是需要复用的模块, 就可以应用到构造函数模式

其他设计模式

单例模式: https://www.jianshu.com/p/4c0604f116ba
建造者模式: https://www.jianshu.com/p/70cf4bb80549
简单工厂模式: https://www.jianshu.com/p/4293450926c2
抽象工厂模式: https://www.jianshu.com/p/d6138f36e6e2
装饰者模式: https://www.jianshu.com/p/16cf284ab810
外观模式: https://www.jianshu.com/p/179ae2a13c59

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,142评论 25 708
  • 上述代码输出结果: 将构造函数当做函数我们可以将构造函数当做函数使用。实际上,不存在定义构造函数的特殊语法。任何函...
    赵者也阅读 247评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,886评论 18 139
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,268评论 0 4
  • 上下文管理器(context manager)是Python2.5开始支持的一种语法,用于规定某个对象的使用范围。...
    爱吃葡萄冰的鲸阅读 310评论 0 0