从零开始学前端 - 21. JS工厂函数和构造函数

作者: 她不美却常驻我心
博客地址: https://blog.csdn.net/qq_39506551
微信公众号:老王的前端分享
每篇文章纯属个人经验观点,如有错误疏漏欢迎指正。转载请附带作者信息及出处。

从零开始学前端 - 21. JS工厂函数和构造函数

  工厂函数和构造函数是面向对象编程的基础,由于在 ES6 之前 JS 没有引入类的概念,所以我们只能通过这种模式来实现封装,将对象抽象成类。

一、工厂函数

  首先我们创建一个对象,这很简单:

var human = {
   
	name : "小明",
	sex : "男"
}

  我们很简单的创建了一个对象,但如果需要我们创建十个、一百个是不是会存在大量的重复代码?
  工厂模式是软件工程领域一种广为人知的设计模式,目的是为了抽象创建对象,考虑到在 JS 中无法创建类,因此用函数封装以特定接口创建对象。其实现方法非常简单,也就是在函数内创建一个对象,给对象赋予属性及方法再将对象返回即可,而这种函数的写法,被我们成为工厂函数。

function Human(name, sex){
   
	var obj = {
   };
	obj.name = name;
	obj.sex = sex;
	return obj;
}
var human1 = Human("小明","男");
var human2 = Human("小红","女");

  函数 Human() 能够根据接受的参数来构建一个包含所有必要信息的 Human 对象。可以无数次地调用这个函数,而且每次它都会返回一个独立的对象。
  工厂模式是用来创建对象的一种最常用的设计模式。我们不暴露创建对象的具体逻辑,而是将逻辑封装在一个函数中,那么这个函数就可以被视为一个工厂。工厂模式根据抽象程度的不同可以分为:
  函数每次执行都会在内部创建一个对象,然后进行一系列赋值操作之后返回。也就是说调用多少次,就会创建多少个独立的对象。这样创建的对象我们只知道他是一个对象,而并不能像 StringNumber 一样分辨出它是那种对象,因为返回的数据类型全部都是 Object

二、构造函数

  任何的函数都可以作为构造函数存在,所谓的构造函数只是一个概念上的定义,通过关键字 new 来实例化对象。两者的区别主要是从功能上进行区分的:

  构造函数的主要功能是创建特定类型的对象,与 new 一起使用,用于定义 “类”,初始化一个对象:

function Human(name, sex){
   
	this.name = name;
	this.sex = sex;
}
var man = new Human("小明","男");
var woman = new Human("小红","女");
man.name;	// 小明
woman.name;	// 小红

  两段函数实现了相同的功能,但我们使用构造函数创建出的对象,拥有 constructor 属性,这个属性会指向创建该对象的构造函数,也就是说我们可以通过该属性判断它的对象类型。

console.log(man.constructor === Human);		// true
console.log(man.constructor === Object);	// false

  但实际上我们一般都会使用 instanceof 运算符来判断对象的类型:

console.log(man instanceof 
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值