javascript创建对象总结

本文介绍了JavaScript中六种创建自定义对象类型的方法,包括工厂模式、构造函数模式、原型模式、组合使用构造函数和原型模式、动态原型模式、寄生构造函数及稳妥构造函数模式,并分析了各自的优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.工厂模式

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 person1=createPerson("jack",25,"software engineer");
	var person2=createPerson("rose",24,"doctor");
工厂模式解决了创建多个相似对象的问题,但没有解决对象识别的问题(即怎么知道一个对象的类型)

2.构造函数模式

function Person(name,age,job){
	this.name=name;
	this.age=age;
	this.job=job;
	this.sayName=function(){
	   alert(this.name);
	};
	}
	var person1=new Person("jack",25,"software engineer");
	var person2=new Person("rose",24,"doctor");
构造函数模式解决了对象识别问题,但是每个方法都要在实例上重新创造一遍(不同实例上的同名函数是不相同的)。改进:通过把函数定义转移到构造函数外部:

function Person(name,age,job){
	this.name=name;
	this.age=age;
	this.job=job;
	this.sayName=sayName;
	function sayName(){
	   alert(this.name);
	}
	}
	var person1=new Person("jack",25,"software engineer");
	var person2=new Person("rose",24,"doctor");
这样新问题又来了:如果需要定义很多方法,就要定义很多全局函数,没有封装性可言。

3.原型模式

function Person(){
	}
	Person.prototype.name="jack";
	Person.prototype.age=25;
	Person.prototype.job="software engineer";
	Person.prototype.sayName=function(){
		alert(this.name);
	};
	
	var person1=new Person();
	person1.sayName(); //"jack"

使用原型对象的好处是可以让所有对象实例共享它所包含的属性和方法,问题也是由其共享本性导致的,特别是对包含引用类型值的属性来说,所以我们一般很少单独使用原型模式。

4.组合使用构造函数模式和原型模式

function Person(name,age,job){
	this.name=name;
	this.age=age;
	this.job=job;
	this.friends=["jhon","court"];
	}
	Person.prototype={
		constructor:Person,
		sayName:function(){
			alert(this.name);
		}
	}
	var person1=new Person("jack",25,"software engineer");
	var person2=new Person("rose",24,"doctor");

这是创建自定义类型最常见,最广泛使用的一种方式。

5.动态原型模式

function Person(name,age,job){
	this.name=name;
	this.age=age;
	this.job=job;
	if(typeOf this.sayName!="function"){
		Person.prototype.sayName=function(){
			alert(this.name);
		};
	}
	}
	var person1=new Person("jack",25,"software engineer");
只有在sayName()方法不存在的情况下,才把它添加到原型中。

6.寄生构造函数

function Person(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 person1=new Person("jack",25,"software engineer");
	var person2=new Person("rose",24,"doctor");
7.稳妥构造函数模式

function Person(name,age,job){
	var o=new Object();
	//定义私有变量和函数

       //添加方法
	o.sayName=function(){
	   alert(name);
	};
	return o;
	}
	





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值