js之--如何合理的创建对象
2016-03-06 22:18
543 查看
在js中创建对象有很多方式,我们首先想到的是最简单的一种,看代码一
var person={}; person.name="carl"; person.say=function(){ console.log(this.name); } 代码一
上面的代码创建了一个person对象,它具有一个属性和一个方法,我们可以直接通过person调用他的方法和得到他的属性,到目前为止,看上去确实创建了一个对象,看上去没有问题,但是,这个对象我如何重用呢?…………貌似不可以。所以有了第二种创建对象的方式,那就是通过function来创建,
上代码二
function Person(){ this.name="carl"; this.say=function(){ console.log(this.name); } } var zhangsan=new Person(); var lisi=new Person(); 代码二
通过上面的代码,我们首先创建了一个Person的函数,这个函数实际上是作为构造函数而出现的,然后我们在函数里面定义了他的属性和方法,之后我们创建了两个对象,一个zhangsan,一个lisi,他们都具备了name属性和say方法,这个一看就比第一种好很多,因为我可以反复的创建对象了,可以重用了,之后创建对象的代码只需要写一行就可以了,但是这个其实也有一个问题,而且还是一个大问题,什么大问题?—–性能问题,因为通过这种的创建方式,每次都会给对象开辟空间用来存放他的属性和方法,那么,我们想想,如果是有1w个对象需要创建,我估计(猜的)浏览器应该就崩溃了,读者可以运行下面代码来做实验
console.log(zhangsan.say==lisi.say);
结果为false,因为他们会在各自的空间上面创建一个say的方法(实际上方法也是对象)。那这么看来,必须得有第三种创建对象的方法才合理,好吧,下面上第三种创建对象的方法,看代码三
function Person(){ this.name="carl"; Person.prototype.say=function(){ console.log(this.name); } } var zhangsan=new Person(); var lisi=new Person();
其实比较一下代码二,只是修改了一个地方,就是把构造函数的方法放到他的prototype属性上面,这个prototype大家可以去查看相关资料了解一下,这里就不详细阐述了,简单的说,就是一个对象的公共区域,一个公共容器,什么意思呢?就是说,这个上面的东西在创建对象的时候,都不会单独分配空间来创建,他只会让对象有一个引用(或者指针),来引用他,那么也就是说,及时有1w个对象,真正的say方法也只有一份,他是存在Person.prototype上面的,我们继续代码二的实验
console.log(zhangsan.say==lisi.say);
这个就会输出true,大家下来可以试一下。
所以一般情况我会用第三种创建对象的方式。
相关文章推荐
- js控制html下拉框select的选择
- javascript删除,添加元素
- 解决js跨域问题的基本方法之 -------JSONP
- JavaScript小工具--TAB选项卡切换隐藏显示动画效果
- layer.js弹出框
- extjs5学习之 Model日期转换
- js 实现各种排序
- JS 数组随机排序
- 记录:js删除数组中某一项或几项的几种方法
- js日期插件
- js日期插件
- js日期插件
- Js中的with
- 传智博客 JS 四
- js 正则表达式
- js 正则表达式
- Uncaught SyntaxError: Unexpected token <
- js主动提交表单
- (36)JS运动之使物体向右运动
- jsoi2015R2D2和R3D1测试总结