- 浏览: 406957 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (268)
- java (22)
- Acegi (8)
- Ajax (17)
- Annotation (3)
- Ant (3)
- JBOSS (6)
- Xdoclet (1)
- CSS (20)
- Data Warehouse (11)
- DB2 (3)
- DOM (1)
- dos (2)
- JMF (1)
- JMS (5)
- J2EE (17)
- Hibernate (7)
- struts (10)
- CORBA (1)
- 职业 (2)
- JSF (1)
- JSTL (8)
- 其它 (1)
- Log4j (7)
- svg (7)
- quartz (3)
- web2.0 (2)
- velocity (2)
- apache commons (1)
- js (9)
- html (4)
- sql (3)
- linux (4)
- dwr (14)
- spring (5)
- GWT (7)
- portlet (4)
- 软件工程 (10)
- actionscript (1)
- 测试 (1)
- tomcat (3)
- flash (0)
- 线程 (1)
- mysql (6)
- flex (1)
- oracle (7)
- crystalreport (4)
- itext (4)
- memcache (2)
- linux 监控 (2)
- mongodb (1)
- Kafka (5)
- 网络 (2)
- 分布式计算 (2)
最新评论
-
chenyongxin:
mark
JBoss 4.0.2集群基本知识及配置方法指南 -
softor:
我找到了,下载吧:http://ishare.iask.sin ...
jad是最简单的class反编译为java文件的小工具 (转载) -
softor:
求下载
dodo@lovehang.com
jad是最简单的class反编译为java文件的小工具 (转载) -
juedui0769:
不错!
请问: 如何在 将 log4j.appender ...
Tomcat 日志 配置 (转载) -
spp_1987:
// 建立一个上传文件的输出流
...
Struts上传多个及N个文件的例子
Javascript本身并不支持面向对象,它没有访问控制符,它没有定义类的关键字class,它没有支持继承的extend或冒号,它也没有用来支持虚函数的virtual,不过,Javascript是一门灵活的语言,下面我们就看看没有关键字class的Javascript如何实现类定义,并创建对象。
一:定义类并创建类的实例对象
在Javascript中,我们用function来定义类,如下:
function Shape()
{
var x=1;
var y=2;
}
你或许会说,疑?这个不是定义函数吗?没错,这个是定义函数,我们定义了一个Shape函数,并对x和y进行了初始化。不过,如果你换个角度来看,这个就是定义一个Shape类,里面有两个属性x和y,初始值分别是1和2,只不过,我们定义类的关键字是function而不是class。
然后,我们可以创建Shape类的对象aShape,如下:
var aShape = new Shape();
二:定义公有属性和私有属性
我们已经创建了aShape对象,但是,当我们试着访问它的属性时,会出错,如下:
aShape.x=1;
这说明,用var定义的属性是私有的。我们需要使用this关键字来定义公有的属性
function Shape()
{
this.x=1;
this.y=2;
}
这样,我们就可以访问Shape的属性了,如。
aShape.x=2;
好,我们可以根据上面的代码总结得到:用var可以定义类的private属性,而用this能定义类的public属性。
三:定义公有方法和私有方法
在Javascript中,函数是Function类的实例,Function间接继承自Object,所以,函数也是一个对象,因此,我们可以用赋值的方法创建函数,当然,我们也可以将一个函数赋给类的一个属性变量,那么,这个属性变量就可以称为方法,因为它是一个可以执行的函数。代码如下:
function Shape()
{
var x=0;
var y=1;
this.draw=function()
{
//print;
};
}
我们在上面的代码中定义了一个draw,并把一个function赋给它,下面,我们就可以通过aShape调用这个函数,OOP中称为公有方法,如:
aShape.draw();
如果用var定义,那么这个draw就变成私有的了,OOP中称为私有方法,如
function Shape()
{
var x=0;
var y=1;
var draw=function()
{
//print;
};
}
这样就不能使用aShape.draw调用这个函数了。
三:构造函数
Javascript并不支持OOP,当然也就没有构造函数了,不过,我们可以自己模拟一个构造函数,让对象被创建时自动调用,代码如下:
function Shape()
{
var init = function()
{
//构造函数代码
};
init();
}
在Shape的最后,我们人为的调用了init函数,那么,在创建了一个Shape对象是,init总会被自动调用,可以模拟我们的构造函数了。
四:带参数的构造函数
如何让构造函数带参数呢?其实很简单,将要传入的参数写入函数的参数列表中即可,如
function Shape(ax,ay)
{
var x=0;
var y=0;
var init = function()
{
//构造函数
x=ax;
y=ay;
};
init();
}
这样,我们就可以这样创建对象:
var aShape = new Shape(0,1);
五:静态属性和静态方法
在Javascript中如何定义静态的属性和方法呢?如下所示
function Shape(ax,ay)
{
var x=0;
var y=0;
var init = function()
{
//构造函数
x=ax;
y=ay;
};
init();
}
Shape.count=0;//定义一个静态属性count,这个属性是属于类的,不是属于对象的。
Shape.staticMethod=function(){};//定义一个静态的方法
有了静态属性和方法,我们就可以用类名来访问它了,如下
alert ( aShape.count );
aShape.staticMethod();
注意:静态属性和方法都是公有的,目前为止,我不知道如何让静态属性和方法变成私有的~
六:在方法中访问本类的公有属性和私有属性
在类的方法中访问自己的属性,Javascript对于公有属性和私有属性的访问方法有所不同,请大家看下面的代码
function Shape(ax,ay)
{
var x=0;
var y=0;
this.gx=0;
this.gy=0;
var init = function()
{
x=ax;//访问私有属性,直接写变量名即可
y=ay;
this.gx=ax;//访问公有属性,需要在变量名前加上this.
this.gy=ay;
};
init();
}
七:this的注意事项
根据笔者的经验,类中的this并不是一直指向我们的这个对象本身的,主要原因还是因为Javascript并不是OOP语言,而且,函数和类均用function定义,当然会引起一些小问题。
this指针指错的场合一般在事件处理上面,我们想让某个对象的成员函数来响应某个事件,当事件被触发以后,系统会调用我们这个成员函数,但是,传入的this指针已经不是我们本身的对象了,当然,这时再在成员函数中调用this当然会出错了。
解决方法是我们在定义类的一开始就将this保存到一个私有的属性中,以后,我们可以用这个属性代替this。我用这个方法使用this指针相当安全,而且很是省心~
我们修改一下代码,解决this问题。对照第六部分的代码看,你一定就明白了
function Shape(ax,ay)
{
var _this=this; //把this保存下来,以后用_this代替this,这样就不会被this弄晕了
var x=0;
var y=0;
_this.gx=0;
_this.gy=0;
var init = function()
{
x=ax;//访问私有属性,直接写变量名即可
y=ay;
_this.gx=ax;//访问公有属性,需要在变量名前加上this.
_this.gy=ay;
};
init();
}
以上我们聊了如何在Javascript中定义类,创建类的对象,创建公有和私有的属性和方法,创建静态属性和方法,模拟构造函数,并且讨论了容易出错的this。
关于Javascript中的OOP实现就聊到这里,以上是最实用的内容,一般用Javascript定义类,创建对象用以上的代码已经足够了。当然,你还可以用mootools或prototype来定义类,创建对象。我用过mootools框架,感觉很不错,它对Javascript的类模拟就更完善了,还支持类的继承,有兴趣的读者可以去尝试一下。当然,如果使用了框架,那么在你的网页中就需要包含相关的js头文件,因此我还是希望读者能够在没有框架的情况下创建类,这样,代码效率较高,而且你也可以看到,要创建一个简单的类并不麻烦~
在下一个版本的Javascript中,将会加入对OOP的支持,届时,我们将看到class关键字,public、private访问控制符~extend继承。如果大家对下一代Javascript感兴趣,不妨可以先接触一下ActionScript3.0,这是一门相当先进的脚本语言,是Adobe收购Macromedia后的一个力作,它和Javascript一样,都属于ECMAScript,只不过AS3.0是ECMAScript的第4版的实现。要学习ActionScript3.0,我重点推荐孙颖老师的《ActionScript3殿堂之路》,这本书写的绝对好,特别是面向对象这部分,写的特别通俗易懂,例子生动,读完以后感觉很有收获,在赞叹新版的ECMAScript的同时,也给了我极大的动力继续深入学习OOP编程思想,有兴趣的读者不妨去品读一下~
一:定义类并创建类的实例对象
在Javascript中,我们用function来定义类,如下:
function Shape()
{
var x=1;
var y=2;
}
你或许会说,疑?这个不是定义函数吗?没错,这个是定义函数,我们定义了一个Shape函数,并对x和y进行了初始化。不过,如果你换个角度来看,这个就是定义一个Shape类,里面有两个属性x和y,初始值分别是1和2,只不过,我们定义类的关键字是function而不是class。
然后,我们可以创建Shape类的对象aShape,如下:
var aShape = new Shape();
二:定义公有属性和私有属性
我们已经创建了aShape对象,但是,当我们试着访问它的属性时,会出错,如下:
aShape.x=1;
这说明,用var定义的属性是私有的。我们需要使用this关键字来定义公有的属性
function Shape()
{
this.x=1;
this.y=2;
}
这样,我们就可以访问Shape的属性了,如。
aShape.x=2;
好,我们可以根据上面的代码总结得到:用var可以定义类的private属性,而用this能定义类的public属性。
三:定义公有方法和私有方法
在Javascript中,函数是Function类的实例,Function间接继承自Object,所以,函数也是一个对象,因此,我们可以用赋值的方法创建函数,当然,我们也可以将一个函数赋给类的一个属性变量,那么,这个属性变量就可以称为方法,因为它是一个可以执行的函数。代码如下:
function Shape()
{
var x=0;
var y=1;
this.draw=function()
{
//print;
};
}
我们在上面的代码中定义了一个draw,并把一个function赋给它,下面,我们就可以通过aShape调用这个函数,OOP中称为公有方法,如:
aShape.draw();
如果用var定义,那么这个draw就变成私有的了,OOP中称为私有方法,如
function Shape()
{
var x=0;
var y=1;
var draw=function()
{
//print;
};
}
这样就不能使用aShape.draw调用这个函数了。
三:构造函数
Javascript并不支持OOP,当然也就没有构造函数了,不过,我们可以自己模拟一个构造函数,让对象被创建时自动调用,代码如下:
function Shape()
{
var init = function()
{
//构造函数代码
};
init();
}
在Shape的最后,我们人为的调用了init函数,那么,在创建了一个Shape对象是,init总会被自动调用,可以模拟我们的构造函数了。
四:带参数的构造函数
如何让构造函数带参数呢?其实很简单,将要传入的参数写入函数的参数列表中即可,如
function Shape(ax,ay)
{
var x=0;
var y=0;
var init = function()
{
//构造函数
x=ax;
y=ay;
};
init();
}
这样,我们就可以这样创建对象:
var aShape = new Shape(0,1);
五:静态属性和静态方法
在Javascript中如何定义静态的属性和方法呢?如下所示
function Shape(ax,ay)
{
var x=0;
var y=0;
var init = function()
{
//构造函数
x=ax;
y=ay;
};
init();
}
Shape.count=0;//定义一个静态属性count,这个属性是属于类的,不是属于对象的。
Shape.staticMethod=function(){};//定义一个静态的方法
有了静态属性和方法,我们就可以用类名来访问它了,如下
alert ( aShape.count );
aShape.staticMethod();
注意:静态属性和方法都是公有的,目前为止,我不知道如何让静态属性和方法变成私有的~
六:在方法中访问本类的公有属性和私有属性
在类的方法中访问自己的属性,Javascript对于公有属性和私有属性的访问方法有所不同,请大家看下面的代码
function Shape(ax,ay)
{
var x=0;
var y=0;
this.gx=0;
this.gy=0;
var init = function()
{
x=ax;//访问私有属性,直接写变量名即可
y=ay;
this.gx=ax;//访问公有属性,需要在变量名前加上this.
this.gy=ay;
};
init();
}
七:this的注意事项
根据笔者的经验,类中的this并不是一直指向我们的这个对象本身的,主要原因还是因为Javascript并不是OOP语言,而且,函数和类均用function定义,当然会引起一些小问题。
this指针指错的场合一般在事件处理上面,我们想让某个对象的成员函数来响应某个事件,当事件被触发以后,系统会调用我们这个成员函数,但是,传入的this指针已经不是我们本身的对象了,当然,这时再在成员函数中调用this当然会出错了。
解决方法是我们在定义类的一开始就将this保存到一个私有的属性中,以后,我们可以用这个属性代替this。我用这个方法使用this指针相当安全,而且很是省心~
我们修改一下代码,解决this问题。对照第六部分的代码看,你一定就明白了
function Shape(ax,ay)
{
var _this=this; //把this保存下来,以后用_this代替this,这样就不会被this弄晕了
var x=0;
var y=0;
_this.gx=0;
_this.gy=0;
var init = function()
{
x=ax;//访问私有属性,直接写变量名即可
y=ay;
_this.gx=ax;//访问公有属性,需要在变量名前加上this.
_this.gy=ay;
};
init();
}
以上我们聊了如何在Javascript中定义类,创建类的对象,创建公有和私有的属性和方法,创建静态属性和方法,模拟构造函数,并且讨论了容易出错的this。
关于Javascript中的OOP实现就聊到这里,以上是最实用的内容,一般用Javascript定义类,创建对象用以上的代码已经足够了。当然,你还可以用mootools或prototype来定义类,创建对象。我用过mootools框架,感觉很不错,它对Javascript的类模拟就更完善了,还支持类的继承,有兴趣的读者可以去尝试一下。当然,如果使用了框架,那么在你的网页中就需要包含相关的js头文件,因此我还是希望读者能够在没有框架的情况下创建类,这样,代码效率较高,而且你也可以看到,要创建一个简单的类并不麻烦~
在下一个版本的Javascript中,将会加入对OOP的支持,届时,我们将看到class关键字,public、private访问控制符~extend继承。如果大家对下一代Javascript感兴趣,不妨可以先接触一下ActionScript3.0,这是一门相当先进的脚本语言,是Adobe收购Macromedia后的一个力作,它和Javascript一样,都属于ECMAScript,只不过AS3.0是ECMAScript的第4版的实现。要学习ActionScript3.0,我重点推荐孙颖老师的《ActionScript3殿堂之路》,这本书写的绝对好,特别是面向对象这部分,写的特别通俗易懂,例子生动,读完以后感觉很有收获,在赞叹新版的ECMAScript的同时,也给了我极大的动力继续深入学习OOP编程思想,有兴趣的读者不妨去品读一下~
发表评论
-
JS类中定义原型方法的两种实现的区别
2008-08-17 22:06 1227我们知道,给JavaScript类添加原形(prototype ... -
javascript typeof的用法
2008-08-17 22:05 828经常会在js里用到数组,比如 多个名字相同的input, 若是 ... -
Dojo API略解---Dojo各包功能说明
2008-02-26 15:17 3749dojo.collections 很有用的 ... -
基于Ajax的应用程序架构汇总 (转载)
2008-02-25 17:58 1263浏览器端框架被划分成两大类: ·应用程序框架:提供浏览器的功 ... -
AJAX开发简略 (第二部分)
2007-10-28 17:26 1090七、AJAX开发 到这里,已经可以清楚的知道AJAX是什么 ... -
Ajax简介
2007-10-28 17:25 944作为J2EE开发人员,我们似乎经常关注“后端机制(backen ... -
掌控上传进度的AJAX Upload
2007-10-28 10:55 1141动机: 2006年底Google了一下AJA ... -
prototype源码以及prototype相关的框架介绍
2007-10-28 10:54 746fdfdgfdgggggggggggggggggggggg -
prototype框架解读
2007-10-28 10:53 880原文出自:http://forum.iteye.com/vie ... -
Prototype 框架简介
2007-10-28 10:52 3456本章将对Prototype框架进 ... -
prototype-1_4_0_js 下载 - 建站资源下载
2007-10-28 10:52 997资源相关介绍:(Javascript的小框架,非常实用) p ... -
Thinking in AJAX -- 基于AJAX的WEB设计
2007-10-28 10:51 892众所周知,异步交互、JavaScript脚本和XML封装数据是 ... -
AJAX如何处理书签和翻页按扭
2007-10-28 10:50 789本篇文章提供了一个开源JavaScript库,它提供了给AJA ... -
AJAX基础教程
2007-10-28 10:49 712这篇文章将带您浏览整个AJAX的基本概貌,并展示两个简单的例子 ... -
prototype_js开发笔记
2007-10-28 10:47 886针对Prototype框架使用讲解,文章非常经典,中文版,在J ... -
AJAX实现基于WEB的文件上传的进度控制
2007-10-28 10:45 25021.引言 2.实现代码 2.1.服务器端代码 2.1.1 ...
相关推荐
在JavaScript中实现类的方式主要有几种,包括对象字面量(Object Literal)、构造函数(Constructor)、原型链(Prototype Chain)以及ES6引入的类语法。每种方式都有其适用的场景和特点,理解它们有助于我们更好地...
而实例则是类的一个具体实现。 我们还知道,面向对象编程有三个重要的概念 - 封装、继承和多态。 但是在JavaScript的世界中,所有的这一切特性似乎都不存在。 因为JavaScript本身不是面向对象的语言,而是基于对象...
在JavaScript中实现LinkedList,我们需要理解其基本概念、操作以及如何用原生JavaScript对象来模拟链表结构。 首先,LinkedList由一系列节点(Node)组成,每个节点包含两部分:数据和指向下一个节点的引用。在...
在 JavaScript 中,类的概念是在 ECMAScript 6(ES6)版本引入的,之前 JavaScript 使用构造函数和原型链来实现面向对象编程。下面我们将深入探讨 JavaScript 中的类。 1. **类的定义** 在 JavaScript 中,类的...
在本文中,我们将深入探讨如何使用JavaScript实现各种网页特效,以提升用户体验并使网站更具吸引力。 1. **页面加载动画** 当用户访问网页时,加载动画可以提供视觉反馈,表明页面正在加载。JavaScript可以通过...
然后,将这些内容转换为Blob对象,Blob是JavaScript中的一个类,用于表示不可变的、原始数据的类文件对象。 2. **URL.createObjectURL()**:有了Blob对象后,可以使用URL.createObjectURL()方法生成一个临时的URL,...
javascript 实现排序分类功能, 冒泡排序, 快速排序等等
`prototype` 是 JavaScript 类实现的关键。通过在构造函数的 `prototype` 属性上定义方法,可以确保这些方法被所有实例共享。此外,`prototype` 还支持继承机制,允许子类继承父类的属性和方法: ```javascript ...
web期末大作业 基于HTML+CSS+JavaScript实现的生活类购物商城首页源码 web期末大作业 基于HTML+CSS+JavaScript实现的生活类购物商城首页源码 web期末大作业 基于HTML+CSS+JavaScript实现的生活类购物商城首页源码 ...
本篇文章将深入探讨如何在iOS中使用`UIWebView`加载bundle内的HTML文件,并实现WebView与JavaScript的交互。 首先,我们需要了解`UIWebView`的基本用法。`UIWebView`是一个视图类,可以显示和加载网页内容。我们...
web期末大作业 基于HTML+CSS+JavaScript实现的农业类水果商城首页源码 web期末大作业 基于HTML+CSS+JavaScript实现的农业类水果商城首页源码 web期末大作业 基于HTML+CSS+JavaScript实现的农业类水果商城首页源码 ...
带注释,可运行,代码一看就懂。运行简单!希望支持 。所有者shine
通过这样的通用JavaScript类,开发者可以创建出更健壮、可维护的ASP.NET应用,同时提高开发效率。不过,随着技术的发展,现代Web开发中更多地倾向于使用库和框架(如jQuery、React、Vue等),它们提供了更高级别的...
在这个主题中,我们将深入探讨如何在Android中加载assets目录下的HTML文件,并通过WebView实现与JavaScript的交互。 首先,我们要了解`WebView`的基本用法。在Android布局文件中,我们添加一个WebView组件: ```...
web期末大作业 基于HTML+CSS+JavaScript实现的电商类化妆品购物商城首页源码 web期末大作业 基于HTML+CSS+JavaScript实现的电商类化妆品购物商城首页源码 web期末大作业 基于HTML+CSS+JavaScript实现的电商类化妆品...
通过以上步骤,你可以实现在QT应用中与网页的JavaScript函数的双向调用,从而充分利用两者的优点,打造功能丰富的桌面应用。这个IntelliPlugin可能是一个帮助开发者实现上述功能的插件,包含必要的示例代码和配置...
web期末大作业 基于HTML+CSS+JavaScript实现的生活类购物商城网站源码(10页) web期末大作业 基于HTML+CSS+JavaScript实现的生活类购物商城网站源码(10页) web期末大作业 基于HTML+CSS+JavaScript实现的生活类购物...
web期末大作业 基于HTML+CSS+JavaScript实现的折扣类电子商务商城源码(5页) web期末大作业 基于HTML+CSS+JavaScript实现的折扣类电子商务商城源码(5页) web期末大作业 基于HTML+CSS+JavaScript实现的折扣类电子商务...
web期末大作业 基于HTML+CSS+JavaScript实现的服装类电子商务商城源码(4页) web期末大作业 基于HTML+CSS+JavaScript实现的服装类电子商务商城源码(4页) web期末大作业 基于HTML+CSS+JavaScript实现的服装类电子商务...