javascript 面向对象继承


Posted in Javascript onNovember 26, 2009

在prototype框架中的类继承实现机制

//为Object类添加静态方法:extend 
Object.extend = function(destination, source) { 
for(property in source) { 
destination[property] = source[property]; 
} 
return destination; 
} 
//通过Object类为每个对象添加方法extend 
Object.prototype.extend = function(object) { 
return Object.extend.apply(this, [this, object]); 
}

Object.extend方法很容易理解,它是Object类的一个静态方法,用于将参数中source的所有属性都赋值到destination对象中,并返回destination的引用。下面解释一下Object.prototype.extend的实现,因为Object是所有对象的基类,所以这里是为所有的对象都添加一个extend方法,函数体中的语句如下:
Object.extend.apply(this,[this,object]);
这一句是将Object类的静态方法作为对象的方法运行,第一个参数this是指向对象实例自身;第二个参数是一个数组,包括两个元素:对象本身和传进来的对象参数object。函数功能是将参数对象object的所有属性和方法赋值给调用该方法的对象自身,并返回自身的引用。有了这个方法,下面看类继承的实现:
<script language="JavaScript" type="text/javascript"> 
<!-- 
//定义extend方法 
Object.extend = function(destination, source) { 
for (property in source) { 
destination[property] = source[property]; 
} 
return destination; 
} 
Object.prototype.extend = function(object) { 
return Object.extend.apply(this, [this, object]); 
} 
//定义class1 
function class1(){ 
//构造函数 
} 
//定义类class1的成员 
class1.prototype={ 
method:function(){ 
alert("class1"); 
}, 
method2:function(){ 
alert("method2"); 
} } 
//定义class2 
function class2(){ 
//构造函数 
} 
//让class2继承于class1并定义新成员 
class2.prototype=(new class1()).extend({ 
method:function(){ 
alert("class2"); 
} 
}); 
//创建两个实例 
var obj1=new class1(); 
var obj2=new class2(); 
//试验obj1和obj2的方法 
obj1.method(); 
obj2.method(); 
obj1.method2(); 
obj2.method2(); 
//--> 
</script>

从运行结果可以看出,继承被正确的实现了,而且派生类的额外成员也可以以列表的形式加以定义.
Javascript 相关文章推荐
不错的JS中变量相关的细节分析
Aug 13 Javascript
jquery中this的使用说明
Sep 06 Javascript
基本jquery的控制tabs打开的数量的代码
Oct 17 Javascript
微信小程序 Flex布局详解
Oct 09 Javascript
Javascript使用SWFUpload进行多文件上传
Nov 16 Javascript
JS+html5制作简单音乐播放器
Sep 13 Javascript
关于Vue项目跨平台运行问题的解决方法
Sep 18 Javascript
Vue动态组件与异步组件实例详解
Feb 23 Javascript
JS数组splice操作实例分析
Oct 12 Javascript
vue中实现点击按钮滚动到页面对应位置的方法(使用c3平滑属性实现)
Dec 29 Javascript
Vue 实现可视化拖拽页面编辑器
Feb 01 Vue.js
js判断两个数组相等的5种方法
May 06 Javascript
javascript 获取元素位置的快速方法 getBoundingClientRect()
Nov 26 #Javascript
javascript或asp实现的判断身份证号码是否正确两种验证方法
Nov 26 #Javascript
Ext grid 添加右击菜单
Nov 26 #Javascript
JS 判断undefined的实现代码
Nov 26 #Javascript
为jquery.ui.dialog 增加“自动记住关闭时的位置”的功能
Nov 24 #Javascript
为jquery.ui.dialog 增加“在当前鼠标位置打开”的功能
Nov 24 #Javascript
JavaScript让IE浏览器event对象符合W3C DOM标准
Nov 24 #Javascript
You might like
php curl基本操作详解
2013/07/23 PHP
typecho插件编写教程(一):Hello World
2015/05/28 PHP
php 获取文件行数的方法总结
2016/10/11 PHP
PHP 传输会话curl函数的实例详解
2017/09/12 PHP
php根据地址获取百度地图经纬度的实例方法
2019/09/03 PHP
showModelessDialog()使用详解
2006/09/21 Javascript
关于Mozilla浏览器不支持innerText的解决办法
2011/01/01 Javascript
javascript标签在页面中的位置探讨
2013/04/11 Javascript
js实现动画特效的文字链接鼠标悬停提示的方法
2015/03/02 Javascript
js实现简单的左右两边固定广告效果实例
2015/04/10 Javascript
JS实现网页顶部向下滑出的全国城市切换导航效果
2015/08/22 Javascript
Bootstrap模态框(modal)垂直居中的实例代码
2016/08/18 Javascript
老生常谈JavaScript 正则表达式语法
2016/08/20 Javascript
使用VUE+iView+.Net Core上传图片的方法示例
2019/01/04 Javascript
Layui点击图片弹框预览的实现方法
2019/09/16 Javascript
Element PageHeader页头的使用方法
2020/07/26 Javascript
python获取当前日期和时间的方法
2015/04/30 Python
python自定义类并使用的方法
2015/05/07 Python
python定时执行指定函数的方法
2015/05/27 Python
python删除特定文件的方法
2015/07/30 Python
Python实现新浪博客备份的方法
2016/04/27 Python
在CentOS上配置Nginx+Gunicorn+Python+Flask环境的教程
2016/06/07 Python
python opencv 读取本地视频文件 修改ffmpeg的方法
2019/01/26 Python
python networkx 包绘制复杂网络关系图的实现
2019/07/10 Python
用django设置session过期时间的方法解析
2019/08/05 Python
python rsync服务器之间文件夹同步脚本
2019/08/29 Python
python日志模块logbook使用方法
2019/09/19 Python
Python 数据分析之逐块读取文本的实现
2020/12/14 Python
Russell Stover巧克力官方网站:美国领先的精美巧克力制造商
2016/11/27 全球购物
美国马匹用品和骑马配件购物网站:Horse.com
2018/01/08 全球购物
名词解释WEB SERVICE,SOAP,UDDI,WSDL,JAXP,JAXM;JSWDL开发包的介绍。
2012/10/27 面试题
国际经济贸易专业推荐信
2013/11/06 职场文书
工作失职造成投诉的检讨书范文
2014/10/05 职场文书
绿里奇迹观后感
2015/06/15 职场文书
四群教育工作总结
2015/08/10 职场文书
微信小程序APP的事件绑定以及传递参数时的冒泡和捕获
2022/04/19 Javascript