javascript面向对象编程(二)
作者:canque 来源:CanQue@RSSIDEA 发布时间:2008-03-07 12:59:00
标签:面向对象,编程,oop,javascript
阅读上一篇:javascript面向对象编程(一)
[javascript模拟传统OOP]
javascript是一种非常灵活的语言,它的灵活度足以让你模拟传统的OOP。主流的javascript框架大都实现了这个功能,这里给出我的实现办法:OOP.js(2k)。
[Class.create,创建类]
这个参考了大名鼎鼎的prototype框架的实现,不过也稍有不同。创建类的方法如下:
<script language="JavaScript">
//定义class,名为baseClass
var baseClass = Class.create({
//类属性
info: 'This is the original info',
//构造函数,统一命名init
init: function(str){
alert('Create a new class, ' + str + '!');
},
//类方法
setInfo: function(str){
this.info = str;
},
getInfo: function(){
return this.info;
}
});
//实例化一个类,同时执行构造函数init
var myClass = new baseClass("well done"); //Create a new class,well done!
alert(myClass.info);//This is the original info
alert(myClass.getInfo());//This is the original info
myClass.setInfo('This is the new info');
alert(myClass.getInfo());//This is the new info
</script>
[Class.add,添加原型方法]
javascript可以为类或实例在类定义以外的地方添加方法,甚至是在实例化类以后。而给某实例添加方法有两类,一类是添加原型方法,一类是添加实例方法。详情请看下面这段代码:
<script language="JavaScript">
var myClass = Class.create({
num: 0,
add: function(num){
return this.num + num;
},
init: function(num){
this.num = num;
}
})
var obj = new myClass(100);
var newObj = new myClass(10)
alert(obj.add(50));//alert 150
//增加原形方法
//你也可以使用原生的javascript添加myClass.prototype.add=function(){}
myClass.add({
multi: function(num){
return this.num * num;
}
});
//基于该原型的实例obj,newObj都获得了multi方法
alert(obj.multi(50));//alert 5000
alert(newObj.multi(5)); //alert 50
//增加实例方法
obj.sub = function(num){
return this.num - num;
}
//实例方法只对该实例有效
alert(obj.sub(50));//alert 50
alert(newObj.sub(5)); //error! newObj.sub is not a function
</script>


猜你喜欢
- 使用 Beanstalkd 作为消息队列服务,然后结合 Python 的装饰器语法实现一个简单的异步任务处理工具.最终效果定义任务:from
- 开前准备Schedule使用方法。基本的Linux操作Python3环境Step1首先我得先假设你会了如何每十五分钟去运行一次检查这件事情。
- 自动抢课脚本使用手册@danteking dating from 2021.12.7 and last updating at 2021.1
- 了解SQL Server 2005数据库的朋友可能都知道,tempdb系统数据库是一个全局资源,可供连接到SQL Server 2005实例
- 1. MySQL的安装与配置:在Ubuntu下安装MySQL方法很简单,使用如下命令:sudo apt-get install mysql-
- 1、去空格及特殊符号s.strip().lstrip().rstrip(',')2、复制字符串#strcpy(sStr1,s
- 数据库复制:简单来说,数据库复制就是由两台服务器,主服务器和备份服务器,主服务器修改后,备份服务器自动修改。复制的模式有两种:推送模式和请求
- 前言在学习SQL 2012基础教程过程中会时不时穿插其他内容来进行讲解,相信看过SQL Server 2012 T-SQL基础教程的童鞋知道
- 在前面的DRF系列教程中,我们以博客为例介绍了序列化器, 使用基于类的视图APIView和ModelViewSet开发了针对文章资源进行增删
- Golang多线程刷票的实现代码直接用Go语言来写下刷票。package mainimport ("fmt" "
- 最近迷上了高效处理数据的pandas,其实这个是用来做数据分析的,如果你是做大数据分析和测试的,那么这个是非常的有用的!!但是其实我们平时在
- 其实就是利用文件“global.asa”!许多ASP编程新手都想知道这东西是什么?事实上,global.asa就是一个事件驱动程序,其中共包
- np.nonzero函数是numpy中用于得到数组array中非零元素的位置(数组索引)的函数。一般来说,通过help(np.nonzero
- <% '测试读取MySql数据库的内容strconnection="driver={mysql odbc 3.51 dri
- 本文实例讲述了Python实现的序列化和反序列化二叉树算法。分享给大家供大家参考,具体如下:题目描述请实现两个函数,分别用来序列化和反序列化
- 1、确认mysql是否已安装,有下面的代码可知[root@cdh1 zjl]# yum list installed mysql*Loade
- 一、背景我们日常测试中存在大量重复的造数操作,且流程较长,为了提升测试效率,我们搭建了数据构造平台。平台采用了前端 + 脚本分离的形式,数据
- PyQt5安装 在cmd下输入pip install PyQt5 完成PyQt5安装,安装完成后,在python安装目录下可以看到配置PyC
- 本文实例讲述了django框架中间件原理与用法。分享给大家供大家参考,具体如下:中间件:轻量级,介于 request和response之间的
- 在Centos中安装完MySQL数据库以后,不知道密码,这可怎么办,下面给大家说一下怎么重置密码1、修改配置文件my.cnf 按i编辑[ro