js创建对象(js小知识)

js创建对象

  1. 工厂模式
		function Person(name, age){
			var o = new Object();
			o.name = name;
			o.age = age;
			o.sayName = function(){
				console.log(this.name);
			};
			return o;
		};
		var p = new Person('viven', 28); 
		console.log(p.constructor == Person); // false

工厂模式最大的问题就是不能识别对象,可以用构造函数解决。

  1. 构造函数

构造函数的创建会经历一下几个步骤
(1) 创建一个新对象;
(2) 将构造函数的作用域赋给新对象(因此 this 就指向了这个新对象);
(3) 执行构造函数中的代码(为这个新对象添加属性);
(4) 返回新对象

		function Person(name, age){
			this.name = name;
			this.age = age;
			this.sayName = function() {
				console.log(this.name);
			};
		};
		var p = new Person('viven', 28);
		console.log(p.constructor == Person); // true
		
		var p1 = new Person('kevin', 30);
		console.log(p.sayName == p1.sayName); // false  不是同一个函数。

构造函数解决了工厂函数的对象不能识别的问题,但是出现的新问题就是每次新建一个实例就会新建一个sayName函数,如果有很多,就会创建很多相同的函数。
以上,两个实例的sayName函数不是同一个,造成了资源的浪费,这就引出了原型模式。

  1. 原型模式
		function Person(){};
		Person.prototype = {
			name: 'viven',
			age: 28,
			sayName: function() {
				console.log(this.name);
			}
		}
		var p = new Person();
		var p1 = new Person();
		console.log(p.sayName == p1.sayName) // true 是同一个函数
		console.log(p.constructor == Person) // false
		
		// 因为直接用对象的方式创建原型,会改写原型,那么constructor指向就会切断原联系,一般会这样做
		Person.prototype = {
			constructor: Person,
			name: 'viven',
			age: 28,
			sayName: function() {
				console.log(this.name);
			}
		}
		console.log(p.constructor == Person) // true
		

这样就能解决重复创建函数的问题,当然这样就不能传递参数进去,进行个性化的设置,那么我们可以使用构造函数和原型模式的组合来解决这个问题。

  1. 构造函数和原型模式的组合用法

这样既可以个性化设置自己的属性,同时可以节约内存,创建一个公用函数。

		function Person(name, age){
			this.name = name;
			this.age = age;
		};
		Person.prototype = {
			constructor: Person,
			sayName: function() {
				console.log(this.name);
			}
		}
		var p = new Person('viven', 30);
		var p1 = new Person('kevin', 28);
		console.log(p.sayName == p1.sayName) // true

以上就是js创建对象的小知识,当然最主要的了解构造函数和原型的内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值