创建对象的几种方式

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>创建对象的几种方式</title>
	</head>
	<body>
	</body>
</html>
<script>
	// 1.Object构造函数创建 创建了Object引用类型的一个新实例,然后保存在变量Person中
	var Person0 = new Object();
	Person0.name = "ab";
	Person0.age = 29;
	// console.log(Person0)

	// 2、使用对象字面量表示法 var Person={}
	var Person2 = {
		name: 'ad',
		age: 29
	};
	// console.log(Person2)

	// 以上两种的缺点:
	// 它们都是用了同一个接口创建很多对象,会产生大量的重复代码,
    //把创建对象的过程封装在函数体内,通过函数的调用直接生成对象。

	// 3、使用工厂模式创建对象
	function createPerson(name, age, job) {
		var o = new Object();
		o.name = name;
		o.age = age;
		o.job = job;
		o.sayName = function() {
			alert(this.name);
		}
		return o;
	}
	var Person3 = createPerson("ab", 29, "th);
	var Person4 = createPerson("ac", 20, "sd");
	// console.log(Person3)
	// console.log(Person4)

	// 4、使用构造函数创建对象
	function Person(name, age, job) {
		this.name = name;
		this.age = age;
		this.job = job;
		this.sayName = function() {
			// alert(this.name)
			console.log(this.name)
		}
	}
	var person5 = new Person("ab", 29, "th");
	var person6 = new Person("ac", 20, "sd");
	// console.log(person5)
	// console.log(person6)
	// 对比工厂模式,我们可以发现以下区别:
	// 1.没有显示地创建对象
	// 2.直接将属性和方法赋给了 this 对象
	// 3.没有 return 语句
	// 4.终于可以识别的对象的类型。对于检测对象类型,我们应该使用 instanceof 操作符,我们来进行自主检测
	// console.log(person5 instanceof Object); //ture
	// console.log(person5 instanceof Person); //ture
	// console.log(person6 instanceof Object); //ture
	// console.log(person6 instanceof Object); //ture

	// 5、原型创建对象模式 解决:
	// 就是每个方法都要在每个实例上重新创建一遍,方法指的就是我们在对象里面定义的函数。如果方法的数量很多,就会占用很多不必要的内存。于是出现了第五种创建对象的方法
	function Person() {}
	Person.prototype.name = "ab";
	Person.prototype.age = "20";
	Person.prototype.jbo = "th";
	Person.prototype.sayName = function() {
		console.log(this.name);
	};
	var person7 = new Person();
	var person8 = new Person();
	person7.name = "hj";
	console.log(person7.name); //'hj'实例
	console.log(person8.name); //'ab'原型

	//  6、组合使用构造函数模式和原型模式
	function Person(name, age, job) {
		this.name = name;
		this.age = age;
		this.job = job;
	}
	Person.prototype = {
		constructor: Person,
		sayName: function() {
			alert(this.name);
		}
	}
	var person9 = new Person('ab', 20, 'th');
	console.log(person9)
</script>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值