BlueDavy之技术Blog
理论不懂就实践,实践不会就学理论!
BlogJava
::
首页
::
新随笔
::
联系
::
聚合
::
管理
::
246 随笔 :: 2 文章 :: 1324 评论 :: 1 Trackbacks
<
2006年2月
>
日
一
二
三
四
五
六
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
1
2
3
4
5
6
7
8
9
10
11
公告
随笔分类
@RIAWork(10)
(rss)
Internet(5)
(rss)
Java(65)
(rss)
Javascript(7)
(rss)
OSGi、SOA、SCA(66)
(rss)
Plugin Architecture(10)
(rss)
Workflow(4)
(rss)
业界随想(26)
(rss)
数据集成(8)
(rss)
系统设计(38)
(rss)
软件工程(22)
(rss)
随笔档案
2008年8月 (1)
2008年7月 (4)
2008年6月 (4)
2008年5月 (3)
2008年4月 (1)
2008年3月 (3)
2008年2月 (1)
2008年1月 (10)
2007年12月 (2)
2007年11月 (2)
2007年10月 (6)
2007年9月 (2)
2007年8月 (4)
2007年7月 (5)
2007年6月 (2)
2007年5月 (4)
2007年4月 (2)
2007年3月 (2)
2007年2月 (2)
2007年1月 (1)
2006年12月 (6)
2006年11月 (5)
2006年10月 (8)
2006年9月 (13)
2006年8月 (15)
2006年7月 (3)
2006年6月 (7)
2006年5月 (9)
2006年4月 (12)
2006年3月 (13)
2006年2月 (9)
2006年1月 (14)
2005年12月 (11)
2005年11月 (14)
2005年10月 (9)
2005年9月 (10)
2005年8月 (5)
2005年7月 (9)
2005年6月 (9)
2005年5月 (2)
2005年2月 (1)
文章档案
2005年5月 (2)
Blogger's
Bjug
DBANotes
大名鼎鼎了,勿需多说
ESBZone[推荐]
(rss)
SOA实战者,强烈推荐
Michael Chen
Peter Cheng
raimundo桃之夭夭
冰云
梦想风暴
西湖边的穷秀才
搜索
最新评论
1. re: Visitor Pattern的理解
切莫误人子弟 !
--可可
2. re: Hibernate实践
好东西,多谢!
--亦风亦尘
3. re: 畅想OSGi DevCon2008[未登录]
OSGi有C++实现吗?
--lei
4. re: OSGi in action online演讲的资料
支持下
--xjmcs
5. re: 关于OSGi Opendoc附带的EventAdmin代码错误的纠正
怎么装EventAdmin的bundle?我每次get下来都是null
--xfzhu
阅读排行榜
1. Hibernate实践(20098)
2. 系统设计说明书(架构、概要、详细)目录结构(14331)
3. 工作流管理系统概述(7792)
4. 发布《OSGi实战》正式版(6789)
5. Eclipse(3.1) Plugin Framework(基于OSGI的Plugin Architecture)(6399)
评论排行榜
1. 漫谈CMS(84)
2. 《OSGi进阶》预览版发布(50)
3. 发布《OSGi实战》正式版(46)
4. 何谓精通(45)
5. Hibernate实践(30)
60天内阅读排行
1. 【译】构建可扩展的Java EE应用(一)(2499)
2. JSP的Request session的有效时间应合理设置(2409)
3. 【译】构建可扩展的Java EE应用(二)(2112)
4. 外行人谈压力测试(1797)
5. 《编程之美》书评(996)
Prototype.js学习
Prototype.js作为javascript的成功的开源框架,封装了很多好用的功能,虽然官方没提供什么文档,不过在google上一搜,好多相关的文档,不过在学习使用的过程中还是碰到了一些问题,希望熟悉的朋友能多加指点,对于prototype.js学习我关注这么几点,同时针对每点也讲讲学习的结果和碰到的问题,^_^
1、类的创建
prototype.js已经封装好了,这个很简单。
var
Person
=
Class.create();
这样就创建了一个Person类,这个Person类必须提供initialize方法的实现:
Person.prototype
=
{
initialize:
function
()
{
}
}
;
对比java,Class.create相当于Class.forName(),initialize相当于构造器,和java的构造器一样,可以自定义为带参数性质的。
可以看到在使用这样的方式定义class后,它和javascript原来的通过function方式来定义一个类就有明确的区分了,在这种情况下我们就可以用Class.create来定义类,用function来直接定义函数。
类通常还涉及静态成员(static性质的)和实例成员(需要实例化才可调用)的定义。
在javascript中这点也非常容易:
静态成员:
var
Person
=
{
name:'person',
getName:
function
()
{
return
'person'}
}
;
实例成员:
Person.prototype
=
{
childname:'child',
eat:
function
()
}
上面的Person.getName是可以直接这么调用的,但eat方法则需通过var person=new Person();person.eat();的方式来调用。
2、类的继承
类的继承其实javascript本身就支持的,不过prototype提供了一种另外的方法。
按照javascript的支持的实现:
var
Student
=
Class.create();
Student.prototype
=
new
Person();
这样就实现了Student继承至Person。
在使用prototype的情况下可以这么实现:
var
Student
=
Class.create();
Object.extend(Student.prototype,Person.prototype);
子类要增加方法时可使用
Student.prototype.study
=
function
()
{}
;
或
Object.extend(Student.prototype,
{
study:
function
()
{}
}
);
3、事件机制(对类方法执行的监听和观察)
在事件机制上则碰到了一些疑惑,作为事件机制主要需要提供事件的定义,对于事件的监听以及对于事件的观察。
在javascript中事件需要以on开头,也就是作为事件就需要采用onclick这样类似的命名:
对上面的Student增加一个对外的事件,如:
Student.prototype.study
=
function
()
{
this
.onstudy();
}
Student.prototype.onstudy
=
function
()
{}
;
这个onstudy就是交给相应的实例去实现的,例如实例采用这样的方式:
function
studyThis()
{
alert(
"
study this
"
);
}
var
student
=
new
Student();
student.onstudy
=
studyThis();
对于事件通常都希望进行监听和观察,根据prototype提供的bindAsEventListener以及Observe,这么进行了尝试:
study.onstudy
=
watchStudy.bindAsEventListener(
this
);
function
watchStudy(event)
{
alert(
"
watch study
"
);
}
按照事件机制来说,在执行study的时候应该可以看到study this和watch study两个提示,但最后执行后只能看到watch study的提示,这是为什么呢?按照listener的概念的话,不应该覆盖原有方法的,不过我看了一下prototype.js的源代码,按照上面的编写方式确实会照成覆盖原方法。
Observe是这么尝试的:
Event.observe(study,'study',watchStudy,false);
按照观察机制来说,应该在执行study的时候会看到两个提示,但最后执行后这行根本就没起到任何作用。
这是为什么呢?
posted on 2006-02-28 18:01
BlueDavy
阅读(2565)
评论(4)
编辑
收藏
所属分类:
Javascript
评论
#
怎么开始使用propotype.js?
2006-04-10 16:40
tomcatlee
<HTML>
<HEAD>
<TITLE> Test Page </TITLE>
<script language="JavaScript" src="/js/prototype.js"></script>
<script>
function test1()
{
var d = $('myDiv');
alert(d.innerHTML);
}
function test2()
{
var divs =$('myDiv','myOtherDiv');
for(i=0; i<divs.length; i++)
{
alert(divs[i].innerHTML);
}
}
</script>
</HEAD>
<BODY>
<div id="myDiv">
<p>This is a paragraph</p>
</div>
<div id="myOtherDiv">
<p>This is another paragraph</p>
</div>
<input type="button" value=Test1 onclick="test1();"><br>
<input type="button" value=Test2 onclick="test2();"><br>
</BODY>
</HTML>
错误: $ is not defined
源文件:
http://localhost:8080/basetomcatproject/pages/html/propotypedemo.html
行:15
请指教阿
回复
更多评论
#
re: Prototype.js学习
2006-04-10 17:00
BlueDavy
<script language="JavaScript" src="/js/prototype.js"></script>这里错了,请确定你的js的路径,可采用绝对路径或相对路径的方式来指定:
绝对路径:
/basetomcat/project/js/prototype.js
相对路径:
../../js/prototype.js
此时prototype.js放在basetomcatproject的js目录下。
回复
更多评论
#
re: Prototype.js学习
2006-04-17 09:44
金铃
根据我的了解 Event.observe(study,'study',watchStudy,false);
不起作用,你可以试一下把var student=new Student();
前面的var 去掉!
回复
更多评论
#
re: Prototype.js学习
2006-04-26 22:06
原创专栏 开源学习
有错误.
静态成员: var Person={
name:'person',
getName:function(){return 'person'}
}; 实例成员:
Person.prototype={
childname:'child',
eat:function()
} 上面的Person.getName是可以直接这么调用的,但eat方法则需通过var person=new Person();person.eat();的方式来调用。
首先var Person={}; Person其实是个new Object(); 不是 function Person(){}
希望你指实例成员是java里的含义.
function Person(){};
Person.prototype={
childname:'child',
eat:function()
}
var a=new Person();
alert(a.childname);
a.childname='aaa';
alert(a.childname);
alert(new Person();.childname);
回复
更多评论
新闻频道
新用户注册
刷新评论列表
标题
姓名
主页
验证码
*
内容(请不要发表任何与政治相关的内容)
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
该文被作者在 2006-03-06 17:15 编辑过
相关链接:
网站导航:
博客园
BlogJava
博客生活
IT博客网
C++博客
PHP博客
博客园社区
管理博客
教师博客
天文博客
汽车博客
足球博客
股票博客
电子博客
管理
相关文章:
两个小问题备忘以及继续谈交互
Velocity for javascript
js版事件管理器 V0.7
js版事件管理器
修改版的丰富交互表格RichTable.js
Javascript基础知识之this篇
Prototype.js学习
Powered by:
BlogJava
Copyright © BlueDavy