我是靠谱客的博主 霸气音响,最近开发中收集的这篇文章主要介绍javascript创建对象的几种方法及优缺点javascript创建对象的几种方法及优缺点,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

javascript创建对象的几种方法及优缺点

1:普通方法:

1):字面量方法:

var box={name:'苏',age:22,run:function(){return this.name+this.age}

2):new 方法:

var box=new Object();

box.name='苏';box.age=22;box.run=function(){return this.name+this,age}

缺点:想创建类似的对象,即属性,方法名相同但值不同的对象,就得写许多相同的代码。

2:工厂模式:

方式:设计一个函数用来创建类似的对象。

function createObject(name,age){
	var obj=new Object;
	obj.name=name;
	obj.age=age;
	obj.run=function(){
		return this.name+this.age;
	}
	return obj;
}
//调用:
var a=createObject('苏',22);

PS:一定要返回得到的对象引用,因为是普通函数需要调用,将得到的对象作为返回值。

缺点:没有办法确定对象的来源,即无法判断创建出来的对象是谁的实例对象。存在识别问题

var a=new Box('苏',22);
var b=new Box('王',22);
alert(a instanceof Object);  //true
alert(b instanceof Object);  //true
都属于Object,但不知道是谁的实例对象。PS:任何类型的对象对属于Object.

3:构造函数式:

方式:通过构造函数创建实例对象。

function Box(name,age){
	this.name=name;
	this.age=age;
	this.run=function(){
		return this.name+this.age;
	}
}

原理:1 构造函数没有new Object();但后台会自动创建obj=new Object();

          2 this就相当于obj;

          3 构造函数不需要返回对象引用,直接new出即可。

构造函数规范:1:构造函数也是函数,但函数名第一个大写;

                        2:不用像普通函数那样调用,直接new出来就行了。

优点:解决了识别问题,即创建的每个实例对象都是Box这个对象的实例:

var a=new Box('苏',22);
var b=new Box('王',22);
alert(a instanceof Object)//true
alert(b instanceof Object)//true
alert(a instanceof Box);  //true
alert(b instanceof Box);  //true

缺点:通过构造函数创建对象时,当一个构造函数被实例化多次时,构造函数里的方法也被实例化了多次,同一类型的不同对象之间并不共用同一函数,造成了内存的浪费。

var a=new Box('苏',22);
var b=new Box('苏',22);
alert(a.run()==b.run());  //true
alert(a.run==b.run);      //false 引用地址不同

图示:


4:原型方式:

function Box(){};
Box.prototype.name='苏';
Box.prototype.age=22;
Box.prototype.run=function(){
	return this.name+this.age;
}
var a=new Box();
var b=new Box();
alert(a.run==b.run)  //true

PS:在原型模式声明中,多了两个属性:_proto_,constructor。

原型用字面量方式改写:

function Box(){};
Box.prototype={
	constructor:Box,  //强制转到Box
	name:'苏',
	age:22,
	run:function(){
		return this.name+this.age;
	}
}

字面量创建的对象实例constructor属性不会指向实例,可强制指向。

缺点:没有办法传参。可在实例里来添加或覆盖原型属性:

var a=Box();
a.name='王';
a.age=23

特点:原型里的属性和方法都是共享的。



5:构造函数加原型模式:

function Box(name,age){
	this.name=name;
	this,age=age;
}
Box.prototype.run=function(){
	return this.name+this.age;
}

方式:需要传参的实例属性用构造函数,需要共享的方法用原型模式。

缺点:不管是否调用了原型里的方法,在创建实例对象时,都会对方法进行初始化

6:动态原型模式:

function Box(name,age){
	this.name=name;
	this.age=age;
if(typeof this.run!='function'){         //只在第一次创建对象时初始化
		Box.prototype.run=function(){
		return this.name+this.age;
		}
	}
}

不可再用字面量方式重写原型。

7:寄生构造函数:

function Box(){
	var obj=new Object();
	obj.name=name;
	obj.age=age;
	obj.run=function(){
		return this.name+this.age;
	}
}

PS:面向对象编程(OOP)的特点

  抽象:抓住核心问题。

  封装:只能通过对象来访问方法。

  继承:从已有的对象下继承出新的对象。

  多态:多对象的不同形态。











最后

以上就是霸气音响为你收集整理的javascript创建对象的几种方法及优缺点javascript创建对象的几种方法及优缺点的全部内容,希望文章能够帮你解决javascript创建对象的几种方法及优缺点javascript创建对象的几种方法及优缺点所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部