创建对象的方式

面向对象是一种思维方式,是把解决问题的关注点放到解决问题的一系列对象上。与之对应的是 面向过程 ,面向过程也是一种思维方式,是把解决问题的一些关注点放到解决问题的每一个详细的步骤上。

可以通过以下几种方式创建对象:

1.通过字面量创建对象

var obj = {
	name:"aaa",
	singer:"bbb"
};
var obj1 = {
	name:"xxx",
	singer:"yyy"
};

格式:{key:value, key:value ... }
使用这种方法每次只能创建一个对象,复用性较差。若想要创建多个对象,代码冗余度太高。

2.使用内置构造函数(JS自带的函数)创建对象

var obj = new Object();
obj.name = "aaa";
obj.singer = "bbb";

var obj1 = new Object();
obj1.name = "xxx";
obj1.singer = "yyy";

使用这种方法创建出来的对象都是空的对象,要手动添加属性,会造成代码重复。

3.封装简单的工厂函数

function createObj() {
	var obj = {};
	obj.xx = xxx;
	return obj;
};

这种方法虽然能够解决代码重复的问题,但是并没有解决对象识别的问题,即怎样知道一个对象的类型。所以这种方法现在也已经不推荐使用了。

4.构造函数

先定义一个普通函数,然后用关键字new来调用这个函数,并返回一个对象,该函数就变成了一个构造函数,它绑定的this 指向新创建的对象,并默认返回this。也就是说,不需要在最后写return this

function Person(name,age){
	this.name = name;
	this.age = age;
	this.sayHello = function() {
		console.log("Hey,man!");
	};
}
var stu1 = new Person("aaa",20);

如果忘记写关键字new,在严格模式下,this.name = name将报错,因为this绑定为undefined。在非严格模式下,this.name=name不报错,因为this绑定为window。于是无意间创建了全局变量name,并且返回undefined,结果会更糟糕。所以调用构造函数的时候千万不要忘记写new。为了区分普通函数和构造函数,按照约定,构造函数首字母应当大写,而普通函数首字母小写,这样一些语法检查工具会帮助你检测到漏写的new

欢迎查看我的另一篇文章 使用原型解决构造函数存在的问题 (传送门在这里~)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值