Javascript中的工厂方法和构造方法

这篇博客对比了JavaScript中的工厂方法和构造方法。在工厂方法中,通过创建函数并传入参数来创建对象,无需使用new关键字;而在构造方法中,必须使用new关键字来创建对象,否则结果为undefined。工厂方法需要返回对象,而构造方法中使用this添加属性。
摘要由CSDN通过智能技术生成

工厂方法和构造方法中一些不同的对比:

对比选项工厂方法构造方法
能否区分对象的种类不能
创建对象时是否必须用new关键字不是

在下面的代码中实践中,会结合上述表格中的对比进行。

一.工厂方法:

使用步骤:

①创建函数:
      创建一个名为 createPerson的函数,如下(在函数体中先创建一个对象obj,然后向obj对象中添加属性)

function createPerson(name, sex, gender){
	var obj = new Object();//在函数中创建一个对象
	obj.name = name;//此处的this 指的是 新创建出来的对象
	obj.sex = sex;
	obj.gender = gender;
	obj.sayName = function func1(){
		console.log("我叫" + this.name + ",性别:" + this.sex + ",今年" + this.gender + "岁了");//这里面的this指的是 新创建的对象。例如下面 ② 中的obj1,就是新创建的对象,那时,this指的是obj1 
	};
	return obj;//如果不返回对象obj,创建出来的结果为“undefined”
};

②调用函数,创建对象
        直接在在函数中传入参数,无需使用new关键字

var obj1 = createPerson("孙悟空","男",18);//创建对象时,是否用new关键字都可以 (var obj1 = new createPerson("孙悟空","男",18);)
var obj2 = createPerson("猪八戒", "男",20);

③打印对象的属性或者方法,显示结果:
        例如:显示出obj1的name属性值,并且调用一下obj2的sayName()方法

console.log("打印obj1.name的结果是:" + obj1.name);
obj2.sayName();
//下面看一下,obj1 是否是 createPerson类?
console.log(obj1 instanceof Object);//结果是 true。说明obj1是Object类。 
console.log(obj1 instanceof createPerson)//结果是 false。说明obj1不是createPerson类的实例,不会有自己类。即使obj1是createPerson函数创建出来的对象

④后台结果如下:
结果返回图

二.构造方法

        构造函数(或者最好称为构造方法): 需要用new关键字去创建对象的函数

使用步骤:

①创建函数
      创建一个 Person 的类。

function Person(name,age,gender){
		this.name = name;  //此处的this 指的是 新创建的对象,下同
		this.age = age;
		this.gender = gender;
		this.func = function(){
			// alert("Person类");
		console.log("我叫" + this.name + ",性别:" + this.sex + ",今年" + this.gender + "岁了");
		}
};

②创建对象
       这里创建两个对象 per1 和 per2,
为了特地看一下构造方法中创建对象是否必须使用new关键字,在创建per1时,没有new关键字。而在创建per2时,使用到new关键字。

var per1 = Person("相博文",18,"男");
var per2 = new Person("奔波霸",28,"男");

③在后台打印一下结果
       补充一个小点:instanceof的具体作用是测试左边的对象是否是右边类或者该类的子类创建的实例对象,是,则返回true。否,则返回false。

console.log("per1的是:" + per1);//结果是false。由于在构造方法中创建per1对象是,没有使用new关键字。
console.log("per2的是:" + per2);//结果是true。创建per2对象时,使用了new关键字。
console.log(per2 instanceof Object);//结果是true。per2是属于Object类的。
console.log(per2 instanceof Person);结果是true。说明在Person方法中可以有属于自己的类。

④查看一下后台打印的结果:
       我们会发现,在构造方法中,没有用new去创建对象的话,后台打印时,会返回"undefined"。
结果返回图

       很显然,在构造方法中,没有用new关键字去创建对象的话,结果返回的是undefined,所以在构造方法中,创建对象时必须使用new关键字
       另外,应该注意:工厂方法和构造方法虽然创建的都是普通函数,但是函数体内的语句是有区别的,例如:工厂方法的函数体中需要用new创建一个都对象obj,并且最后返回它。而构造方法中是直接用this关键字来添加属性的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值