javascript Prototype 对象扩展


Posted in Javascript onMay 15, 2009

Javascript当然也不例外,可是关于对象的引用问题,你考虑过么?通常的做法是一系列对象共享类的方法,而不是为每个对象复制一份函数。下面看看为每个对象复制一份函数的做法。

var myobject=function(param1,param2) 
{ 
this.name=param1; 
this.age=param2; 
this.showmsg=function() 
{ 
alert("name:"+this.name+"\n"+"age:"+this.age); 
} 
} 
var objectone=new myobject('liu',20); 
alert(objectone.name); //liu 
var objecttwo=new myobject('lin',20); 
alert(objecttwo.name); //lin 
alert(objecttwo.showmsg()); 
var objectthree=new myobject('lhking',22); 
alert(objectthree.showmsg());

看起来不错,用起来也不错,对象之间互相没有任何干扰,也能正常完成工作,一切看起来理所当然,但是你每次产生一个新对象的时候,脚本引擎都会给对象复制一份属性和方法,有没有觉得这样很浪费内存呢?在客户端的这种对象的复制方式,极其容易造成内存泄露,因为每次产生新的实例都会复制所有的属性和方法,占用大量的内存。
在大型JavaScript应用中首先考虑的就是内存问题。
正确的使用方法是用prototype关键字来定义一个类的方法或者属性
var myobject=function(param1,param2) 
{ 
this.name=param1; 
this.age=param2; 
myobject.prototype.showmsg=function() 
{ 
alert("name:"+this.name+"\n"+"age:"+this.age); 
} 
} 
var objectone=new myobject('liu',20); 
alert(objectone.name); 
var objecttwo=new myobject('lin',20); 
alert(objecttwo.name); 
alert(objecttwo.showmsg()); 
var objectthree=new myobject('lhking',22); 
alert(objectthree.showmsg);

这样的话,你创建的对象之间可以共用方法,也就是showmsg()函数只定义一次,其它的对象共用这一个方法,而不是复制出自己的方法。
Javascript中的prototype已经说完。

看看JavaScript中的对象扩展

function rand(x) 
{ 
return Math.ceil(Math.random()*x); 
} 
生成随机数组的一个扩展方法 
Array.prototype.random=function() 
{ 
for(var i=(this.length-1);i>1;i--) 
{ 
var j=rand(this.length-1); 
var cache=this[i]; 
this[i]=this[j]; 
this[j]=cache; 
} 
} 
var array=new Array("1","2","3","4","5"); 
for(var a in array) 
{ 
alert(array[a]); 
} 
array.random(); 
for(var b in array) 
{ 
alert(array[b]); 
}

再看看对象反射
反射是一种对象的机制,它允许你在完全不了解对象的情况下了解它的属性和方法,通常情况下,程序员对于自己所操纵的对象是如何组成的是非常了解的,但是在某些特殊情况下使用某个其他人写的复杂的对象的时候,我们需要快速了解这个对象的属性和方法,就需要用到反射的机制,当然反射的应用并不是局限于此,这里只是介绍反射在Javascript中的使用方法.

首先我们可能想知道在某个对象中是否存在一个特定的属性或者方法,这时候我们可以地测试它:
if(typeof(myobject.someproperty)!="undefined")
{
}
在Javascript中如果没有定义一个对象或者变量的话,它总是返回undefined类型.
也可以用其他的内建类来缩小测试范围:
if(myobject instanceof Object)
{
}
instanceof 是用来测试内建类或者自定义类的操作符,内建类指Array,String,Date,Number,Math,RegExp,Boolean,Function之类的内建类.例如:Function和Array都是继承自Object类的,所以如果你在代码中如果测试某个Array对象的话,如果你先测试它是否是Object,将返回true,如果测试它是否是Array的话,它也会返回true。

一个更简单而有用的方法,是遍历一个对象的所有属性和方法来快速了解一个对象的内部状态:

function myobject(){ 
this.name="name"; 
this.age="age"; 
this.sex="sex"; 
this.func=function(){ 
} 
} 
var myobj=new myobject(); 
for(var i in myobj){ 
alert(myobj[i]); 
}
Javascript 相关文章推荐
javascript中的继承实例代码
Apr 27 Javascript
ExtJS4 组件化编程,动态加载,面向对象,Direct
May 12 Javascript
js写的评论分页(还不错)
Dec 23 Javascript
javascript:FF/Chrome与IE动态加载元素的区别说明
Jan 26 Javascript
JavaScript检查数字是否为整数或浮点数的方法
Jun 09 Javascript
使用AmplifyJS组件配合JavaScript进行编程的指南
Jul 28 Javascript
jQuery多条件筛选如何实现
Nov 04 Javascript
AngularJS实现表单手动验证和表单自动验证
Dec 09 Javascript
JS模拟的Map类实现方法
Jun 17 Javascript
laydate 显示结束时间不小于开始时间的实例
Aug 11 Javascript
基于Vue2的独立构建与运行时构建的差别(详解)
Dec 06 Javascript
JavaScript函数式编程(Functional Programming)组合函数(Composition)用法分析
May 22 Javascript
JavaScript设置FieldSet展开与收缩
May 15 #Javascript
childNodes.length与children.length的区别
May 14 #Javascript
DOM下的节点属性和操作小结
May 14 #Javascript
JQuery textlimit 显示用户输入的字符数 限制用户输入的字符数
May 14 #Javascript
JavaScript 动态将数字金额转化为中文大写金额
May 14 #Javascript
JS面向对象、prototype、call()、apply()
May 14 #Javascript
JavaScript Date对象使用总结
May 14 #Javascript
You might like
轻松修复Discuz!数据库
2008/05/03 PHP
PHP登陆后跳转到登陆前页面实现思路及代码
2014/01/17 PHP
jQuery中delegate和on的用法与区别详细解析
2014/01/26 Javascript
jQuery插件实现多级联动菜单效果
2015/12/01 Javascript
基于Bootstrap重置输入框内容按钮插件
2016/05/12 Javascript
使用JavaScript判断手机浏览器是横屏还是竖屏问题
2016/08/02 Javascript
详解ECharts使用心得总结
2016/12/06 Javascript
bootstrap下拉菜单使用方法解析
2017/01/13 Javascript
原生js实现省市区三级联动代码分享
2018/02/12 Javascript
vue cli使用融云实现聊天功能的实例代码
2019/04/19 Javascript
webpack 代码分离优化快速指北
2019/05/18 Javascript
使用Vue生成动态表单
2019/11/26 Javascript
编写Python小程序来统计测试脚本的关键字
2016/03/12 Python
Python实现输出某区间范围内全部素数的方法
2018/05/02 Python
Django CBV类的用法详解
2019/07/26 Python
Python人工智能之路 之PyAudio 实现录音 自动化交互实现问答
2019/08/13 Python
python图的深度优先和广度优先算法实例分析
2019/10/26 Python
TensorFlow自定义损失函数来预测商品销售量
2020/02/05 Python
python 已知平行四边形三个点,求第四个点的案例
2020/04/12 Python
浅谈Python中的继承
2020/06/19 Python
python RSA加密的示例
2020/12/09 Python
python中if嵌套命令实例讲解
2021/02/25 Python
纯CSS实现聊天框小尖角、气泡效果
2014/04/04 HTML / CSS
英国排名第一的礼品体验公司:Red Letter Days
2018/08/16 全球购物
Chi Chi London官网:购买连衣裙和礼服
2020/10/25 全球购物
Exception类的常用方法
2012/06/16 面试题
运动会800米加油稿
2014/02/22 职场文书
党支部承诺书范文
2014/03/28 职场文书
电子商务专业自荐信
2014/06/02 职场文书
物流专业专科生职业生涯规划书
2014/09/14 职场文书
2015元旦晚会主持人开场白+结束语
2014/12/14 职场文书
纪检监察立案决定书
2015/06/24 职场文书
股东合作协议书模板2篇
2019/11/05 职场文书
励志正能量20句:送给所有为梦想拼搏的人
2019/11/11 职场文书
python使用openpyxl库读写Excel表格的方法(增删改查操作)
2021/05/02 Python
Go语言grpc和protobuf
2022/04/13 Golang