- 浏览: 175046 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (186)
- [网站分类]4.其他技术区 (93)
- [网站分类]6.转载区(Java技术文章转载, 请注明原文出处) (4)
- [网站分类]3.非技术区 (7)
- [网站分类]1.网站首页原创Java技术区(对首页文章的要求: 原创、高质量、经过认真思考并精心写作。BlogJava管理团队会对首页的文章进行管理。) (28)
- HTML&CSS (0)
- 感悟生活 (4)
- c#(.net) (1)
- [网站分类]2.Java新手区 (32)
- [网站分类]5.提问区(Java方面的技术提问) (1)
- java (6)
- web前端 (7)
- php (0)
- C++ (1)
- python (0)
- 互联网应用 (0)
最新评论
-
lliiqiang:
请求单线程资源只能等待结果.
Applet 与JS通信 -
feng2qin:
期待你的精彩回到。QQ:864479410
Applet 与JS通信 -
feng2qin:
我想问一句;哥们儿,applet程序中调用js,你真的成功了嘛 ...
Applet 与JS通信 -
lyaixsp:
...
ExtJS 入门学习之 window与panel篇 -
longzijian:
不知道 java-he 现在找到数组的这种特性 的原因在那里
和网友关于javascript数组的讨论
javascript 面向对象特性与编程实现
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>
在 06 年用 javascript 写过上千行的应用,现在的项目中经常用到 javascript ,说不熟悉吧也熟悉了。说熟悉吧, javascript 的面向对象部分还是比较陌生。实际上自己没有系统学习过 javascript ,没有完整看过一本 javascript 的书。今天决定网上定两本书,一本是《 javascript 高级程序设计》《 javascript dom 编程艺术》,想着也该较系统的学习一下,项目中也要大量应用到这些了,必定下一个项目我们将采用 AJAX 。总结下自己学 ajax 时候补充的一点 javascript 知识。
一、 javascript 面向对象特性
1. javascript 中的函数
javascript 的 function 对象在调用过程中具有一个 arguments 属性,它是由脚本解释器创建的,这也是创建 arguments 唯一途径。 Arguments 对象可以看作是一个 Array 对象,它具有 length 属性,可以通过序号访问每一个参数。 Arguments 有个 callee 属性,可以获取到执行的 function 对象的引用。
eg :
funtion f1 ( n )
{
if(n<=0)
{
return 1;
}else
{
return n*arguments.callee(n-1);// 实际同 return n*f1(n-1);
}
上例利用 callee 属性实现了匿名的递归调用。
2. apply 和 call 方法:
apply 方法和 call 方法有形似之处,两者都将函数绑定到其他对象上执行。
举例:
obj1.fun1.apply(obj2,[“test”]);
含义:是将 obj1 对象的方法 fun1 绑定到 对象 obj2 上,并使用参数 test 。
obj1.fun1.call(obj2,“test”);
含义同上,他们区别是在 apply 参数以 array 对象传入。而 call 是依次传入参数的。
3. this 和 with
this 在对象的方法被调用时候,指代调用该方法的对象实例。
使用 with 语句时,代码变得更加短且易读:
没有用 with 之前
x = obj.fun1(“a”);
y = obj.fun2(“b”);
用 with 之后,就变成:
with(obj)
{
x=fun1(“a”);
y=fun2(“b”);
}
4. for in
在 javascript 中可以使用 for in 语句遍历对象中所有属性和方法。例如下面的代码就遍历了 test1 对象的属性和方法,如果是属性则输出属性值,如果是方法则执行方法。
for(p in t)
{
if(typeof(t[p])==”function”)
{
t[p]();
}else
{
alert(t[p]);
}
}
二、 javascript 面向对象编程实现
对比 java 中面向对象编程中继承,以及封装,多态等常见概念,进行总结。
1. 类的声明
首先来看下类的实现,前面已经使用了一种声明类的方法。
function test1()
{
this.prop1 = “prop<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /?><chmetcnv w:st="on" unitname="”" sourcevalue="1" hasspace="False" negative="False" numbertype="1" tcsc="0">1”</chmetcnv>;
this.prop2 =”prop<chmetcnv w:st="on" unitname="”" sourcevalue="2" hasspace="False" negative="False" numbertype="1" tcsc="0">2”</chmetcnv>;
this.fun1 = function()
{
……
}
}
上面代码声明了两个公有属性,和一个方法。大家都知道类里除了公有成员还可能还有一些私有成员变量,但是 javascript 并没有提供相应的机制来定义私有成员变量,不过利用一些 javascript 的小技巧就可以实现私有成员变量。如下:
function test1 ()
{
var prop3 = “test”;
this.prop1 = “prop<chmetcnv w:st="on" unitname="”" sourcevalue="1" hasspace="False" negative="False" numbertype="1" tcsc="0">1”</chmetcnv>;
this.prop2 =”prop<chmetcnv w:st="on" unitname="”" sourcevalue="2" hasspace="False" negative="False" numbertype="1" tcsc="0">2”</chmetcnv>;
this.fun1 = function()
{
……
}
}
上面代码通过 var 关键字声明了一个局部变量 prop3 ,其作用域是 test1 类定义的内部,这样就实现了变量私有化。
另外在 javascript 中可以通过下面的方式声明静态属性和静态方法。
< script LANGUAGE =" JavaScript " >
function test ( n )
{
}
test . staticProp = " static prop test!" ;
test . staticMechod = function ()
{
alert ( "adfadfd" );
}
alert ( test . staticProp );
test . staticMechod ();
</ script >
实际上没有感觉到 javascript 中静态的必要性(不像 java ),也许是我对书本理解的不够,或者是应用太少。如果有读者朋友,有不同认识,欢迎发表看法,大家交流。
如果要声明一个类的实例属性或方法,可以使用 javascript 中对象的 prototype 属性。例如:
test1.prototype.prop1 = “prop<chmetcnv w:st="on" unitname="”" sourcevalue="1" hasspace="False" negative="False" numbertype="1" tcsc="0">1”</chmetcnv>;
test1.prototype.method1 = function(){}
利用 prototype 属性,可以实现另外一种类的声明方式:
< script LANGUAGE =" JavaScript " >
function test ()
{}
test . prototype =
{
p1 : "p1" ,
p2 : "p2" ,
f1 : function ()
{
alert ( "f1" );
}
}
var te = new test ();
te . f1 ();
</ script >
上面使用 {} 的方式声明了一个匿名对象,大括号内用逗号将属性与值的列表分隔开。可以看到,采用 prototype 的方式声明类,代码更加简洁明了。因此这种方式在很多 AJAX 框架中得到广泛应用。
2. 继承
javascript 本身并没有提供继承,那么如何实现类的继承呢?最直接大方法是复制原方法,然后在里面加入新成员。但这样做实在是落后,因为当原类变化,新继承的类还要手动变化,容易出错。而下面这种用 for in 控制的复制就不那么容易出错了。
function test1()
{
for(p in test.prototype)
{
test1.prototype[p] = test.prototype[p];
}
test1.prototype.newmethod = function()
{
alert(“newfunction”);
}
}
3. 多态
多态的是实现可以采用和继承类似的方法。首先定义一个抽象类,其中可以调用一些虚方法,虚方法在抽象类中没有定义,而是通过其具体实现类来实现的。
< script LANGUAGE =" JavaScript " >
// 一个继承方法
Object . extend = function ( destination , source )
{
for ( pro in source )
{
bord
发表评论
-
详细总结LOG4J的使用
2007-02-06 16:31 7121 import java.util.*; 2 impor ... -
数字签名
2007-02-06 16:39 773使用applet经常涉及到java的砂箱问题,由于java的安 ... -
常见排序算法
2007-02-06 16:48 839<!--<br><br> ... -
测试连接数据源
2007-02-06 17:07 8091 ////////////////////////// ... -
解析XML
2007-02-06 17:12 6511 2 package com.parsexml ; ... -
BASE64编码
2007-02-06 17:16 7631 ////////////////////////// ... -
MD5加密
2007-02-07 09:49 934<!--<br><br>Cod ... -
省市地区三级菜单
2007-02-07 09:58 1219级联菜单:(1.js文件)<!--<br>& ... -
解析XML字符串与xml文件
2007-02-07 10:53 956对两种情况,这个文件不需要修改:<!--<br&g ... -
总结WebService的使用
2007-02-08 09:18 766一、安装jsp程序员应该不会装错。首先下载axis,解压缩。将 ... -
Applet 与JS通信
2007-02-08 16:09 4875Applet 与JS通信:一、页面嵌入applet:<a ... -
正则表达式使用详解
2007-02-14 10:54 770如果我们问那些UNIX系 ... -
xml学习总结之一
2007-02-15 13:16 7391 . XML 与 DTD —— XML 入门知识 1 ... -
xml学习总结之二
2007-02-26 10:49 6632. XML 名称空间 XML 命 ... -
JAVA 写的一截屏小工具
2007-03-01 09:48 712该截图工具的原代码参照了网上一文:(http://www.ch ... -
记事本程序
2007-03-08 12:09 696写了一个记事本程序,程序运行效果如下。 ... -
servlet学习笔记之一
2007-03-09 10:48 614servlet 学习笔记 自序 昨天心情有些失落。公司从去 ... -
servlet学习笔记之二
2007-03-26 19:16 564servlet 学习笔记之二 — ... -
servlet学习笔记之三
2007-03-26 19:25 587servlet 学习笔记之三 ——关于 web 应用程序的部 ... -
JFreeChart 入门指南
2007-04-18 01:47 796JFreeChart也许对大家来说很陌生,JFreeCh ...
相关推荐
在提供的资源中,《代码之美》PDF文件可能包含了关于编程实践和代码风格的指导,而《Javascript面向对象编程》PPT可能更具体地阐述了JavaScript OOP的细节和示例。学习这些材料将有助于深入理解JavaScript的面向对象...
如何实现JavaScript中缺失的面向对象特性,如对象的私有成员与私有方法;如何应用适当的编程模式,发挥JavaScript语言特有的优势;如何应用设计模式解决常见问题等。, 《JavaScript面向对象编程指南》着重介绍...
如何实现JavaScript中缺失的面向对象特性,如对象的私有成员与私有方法;如何应用适当的编程模式,发挥JavaScript语言特有的优势;如何应用设计模式解决常见问题等。 《JavaScript面向对象编程指南》着重介绍...
JavaScript作为一门浏览器语言的核心思想;...如何实现JavaScript中缺失的面向对象特性,如对象的私有成员与私有方法;如何应用适当的编程模式,发挥JavaScript语言特有的优势;如何应用设计模式解决常见问题等。
JavaScript是一种广泛...通过深入学习这本《JavaScript面向对象编程指南(第2版)》,开发者不仅能掌握JavaScript的面向对象编程基础,还能了解到实际项目中如何有效地运用这些知识,提升编程技巧和解决问题的能力。
下面将详细探讨JavaScript面向对象编程的基本原理、特性以及实际应用。 1. **类与对象** - 在JavaScript中,对象是键值对的集合,可以通过字面量语法或构造函数创建。例如: ```javascript const person = { ...
### JavaScript面向对象编程精要 #### 一、引言 JavaScript是一种灵活且强大的脚本语言,它虽然起源于一种简单的浏览器脚本语言,但随着时间的发展,JavaScript已经成为了一种功能全面的编程语言,尤其是在Web开发...
### JavaScript面向对象编程详解 #### 一、引言 JavaScript作为一种广泛使用的脚本语言,在Web开发领域占据着举足轻重的地位。尽管JavaScript本质上是一种基于原型的语言,但它也支持面向对象编程的一些特性,使得...
`JavaScript面向对象编程讲解.pptx`可能提供了更详细的理论解释和更多示例,帮助读者深入理解面向对象编程在JavaScript中的应用。 学习JavaScript面向对象编程,不仅有助于理解代码的结构和复用性,还有助于提高...
- **第七章:混合式编程**:介绍如何结合面向对象编程与其他编程范式(如函数式编程)来构建复杂的系统。 #### 五、读者对象及学习目标 本书适合有一定JavaScript基础的开发者阅读。通过本书的学习,读者可以深入...
### JavaScript面向对象编程知识点概述 #### 一、现代JavaScript编程概览 - **JavaScript的演进**:自诞生以来,JavaScript经历了从一个简单的脚本语言到现今被广泛应用于构建复杂应用的强大编程语言的过程。它的...
在本文中,我们首先介绍了闭包的概念和特征,然后介绍了基于闭包的JavaScript面向对象编程框架的设计和实现。该框架包括三个主要部分:类的定义、继承和多态。 类的定义是基于类的面向对象编程语言的基本特征。通过...
本文将重点介绍JavaScript面向对象编程的基础概念和实现方式。 #### 二、JavaScript中的对象和属性 在JavaScript中,一切皆为对象。无论是内置类型如字符串、数字还是自定义的对象,都可以被视为具有属性和方法的...