14.对象创建模式

下面介绍几种javaScript中创建对象的方式:

方式一、Object构造函数模式

  • 先创建空object对象,再动态的添加属性/方法
  • 使用常见:起始时不确定对象内部数据
  • 问题:语句太多
var obj=new Object();
    obj.name='lhh',
    p.age=12,
    p.setName=function(name){
    this.name=name;
}

方式二、对象字面量模式

  • 使用{}创建对象,同时执行属性/方法
  • 使用场景:起始时对象内部数据时确定的。
  • 问题:如果创建多个对象,有重复代码
var p={
	name:'lhh',
	age:12,
	setName=function(name){
		this.name=name
	}
}

方式三、工厂模式

  • 通过工厂函数动态创建对象并返回
  • 使用场景:需要创建多个对象
  • 对象没有一个具体的类型,都是Object类型
function createPerson(name,age){
	var obj={
		name:name,
		age:age,
		setName:function(name){
			 this.name=name;
		}
	}
	return obj;
}
var p1=createPerson('Tom',12)
var p2=createPerson('jack',13)

方式四、自定义构造函数模式

  • 自定义构造函数
  • 适用场景:需要创建多个类型确定的而对象
  • 问题:每个对象都有相同的数据,比如这里的setName()方法每个实例都创建了这样一个方法,浪费内存
function Person(name,age){
	this.name=name;
	this.age=age;
	this.setName=function(name){
		this.name=name;
	}
}
var p1=new Person('ljj',12);
console.log(p1 instanceof Person);//p1的数据类型时Person

function Student(name,age){
    this.name=name;
    this.age=age;
    this.setName=function(name){
        this.name=name;
    }
}
var p2=new Student('lhh',13);
console.log(p2 instanceof Student);//p2的数据类型是Student

补充:使用自定义方式创建实例时,必须使用new操作符。使用该操作符,会经历以下的一些过程:

  • 创建一个对象
  • 将构造函数的作用域赋给新对象
  • 执行构造函数中代码(为这个新对象添加属性)
  • 返回新对象

方式五、原型模式

  • 所有实例的属性一样。
  • 使用场景:要求所有的实例对象共享所有的属性
  • 问题:一般实例都需要有自己的属性 。
function Persion(){}
Person.prototype.name='Nicholas';
Person.prototype.age=12;
Person.prototype.setName=function(){
	console.log(this.name);
}
Person.prototype.friends=['Shelby','Count']

方式六、构造函数+原型的组合模式

  • 自定义构造函数,属性在函数中初始化,方法添加到原型上
  • 适用场景:需要创建多个类型确定的对象
function Person(name,age){
	this.name=name;
	this.age=age;
}
//在构造函数原型中添加方法
Person.prototype.setName=funciton(name){
	this.name=name;
}
Person.prototype.constructor=Person;
//下面构建的两个对象,都可以通过原型链使用同一个方法setName;
var p1=new Person('1hh',12);
var p2=new Persong('lxh',13);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值