prototype.js让你更深入的了解javascrip精

上传人:博****1 文档编号:455357446 上传时间:2022-09-05 格式:DOC 页数:11 大小:64.50KB
返回 下载 相关 举报
prototype.js让你更深入的了解javascrip精_第1页
第1页 / 共11页
prototype.js让你更深入的了解javascrip精_第2页
第2页 / 共11页
prototype.js让你更深入的了解javascrip精_第3页
第3页 / 共11页
prototype.js让你更深入的了解javascrip精_第4页
第4页 / 共11页
prototype.js让你更深入的了解javascrip精_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《prototype.js让你更深入的了解javascrip精》由会员分享,可在线阅读,更多相关《prototype.js让你更深入的了解javascrip精(11页珍藏版)》请在金锄头文库上搜索。

1、js是一门很强大的语言,灵活,方便。目前我接触到的语言当中,从语法角度上 讲,只有Ruby比它更爽。不过我接触的动态语言只有:js ruby python flash的as简 单的几门,应该算是井底之蛙之见。js语法成分简单,没有ruby语言复杂。所以有时候我觉得她更干净(Ruby Fans 不要攻击我哦,我也是很爱很爱很爱Ruby的!Prototype.js无疑是js的漂亮之作,从它身上应该可以学到一些东西。如果你用js在页面仅仅能写出if, alert等简单的验证代码,或者想多了解一下Js, 那么此文可能对你有帮助。好了,开始吧。现在我突然想起了 Thinking in java中的一切皆

2、是对像,其实我觉得这句话 有点不适合java反倒是更适合js1. 怎样构造(初始化对象?js代码var Prototype = Versio n: 1.5.0_rc1,ScriptFragme nt: (?:(n|r|.*?(?:,empty Function: fun cti on( ,K: fun cti on(x return x就这样,初始化了一个对象(名字就叫Prototype以及对象的四个成员:Version,ScriptFragme nt, empt yFunction, K我们也来试试:js代码varbbs = n ame: JavaEye,versi on: 20,descr

3、ibe:做最棒的软件开发交流区,sayHello: function( alert(hello, imjavaeye! 于是你可以这样使用:bbs.name或bbs.sayHello(看到吗? sayHello是一个方法哦,不要惊慌,一切都是对象,所以它和name 是一样的,只不过初始化,或定义的语法不一样。想起js中的正则表达式中的那两 个杆杆了吗?可爱吧!方法是对象,所以它可以被当作参数传递,或者作为方法的返回值。所以Prototype中有一个 Version属性,还有一个匹配script的正则式字符串,一 个空方法emptyFuncti on还有一个方法K,它仅仅返回参数。没问题吧继续!

4、2. 构造函数?先让我们写段代码吧(中学时,我语文极差(大学没语文了,我想写代码让你们明 白我心里真实的想法:js代码var Pers on = fun ctio n(n ame / 这里 Pers on 是一 -个方法this. name = n ame;varbe ncode = new Persi on (be ncode; /这里像 Java 吧!alert(be ncode .n ame;先看结果:从 alert(be ncode .n ame可 以知道,ben code是 对象,而 n ame 就是 ben code 的属性, 它被正确地初始化为bencode所以 varbe nc

5、ode = new Persi on (be ncode就是构造了一个新的对象 ,Pers on(相 当于构造函数 所以new这个关键字,就是构造一个新的对象,并且在这个对象上调 用相应的方法,并将这个对象返回。按上面说:方法如果用在在new后面,就相当于成了构造函数了。话又说回来了,如果varbencode = new Persion(bencode是构造了一个对象,像 Java,那么Person是不是类呢?可是Person不是方法吗?可是方法不也是对象吗?类也是对象?一切皆对象?本来无一物!好了,看 Prototype.js 吧js代码var Class = create: functio

6、n( retur n fun cti on( this.i nitialize.apply(this, argume nts;初始化一个Class对象,它有一个成员,是一个方法,这个方法返因另一个方法(方 法是对象,所以可以作为参数或者返回值所以如果我们这么做:js代码var A = Class.create(; 此时A是一个方法 方法体,下面解释var a = new A(;/对方法使用new操作符,就是构造一个新的对象,然后在这个 对象上调用这个方法(现在是A上面分析说? A相当于类,哈哈Class.create(; /终于名副其实var a = new A(;/也是相当地直观,就是构造一

7、个新的对象,类型是Anew操作符构造了对象,并调用了方法,这个方法到底做了什么呢?也就是上面 没有分析的东东,看看先:js代码var Class = create: function( return fun ctio n( / 见1this.i nitialize.apply(this, argume nts; / 见21 . new操作符,就会在新产生的对象上调用这个方法2 .哦?这里就是调用this对象上的initialize方法,并传递arguments换句话说就是把构造的任务委托给ini tialize方法initialize?明E里来?见下面,类的扩展(继承3. Prototype?

8、看段老代码:js代码var Pers on = function(n ame this. name = n ame;varbe ncode = new Pers on (be ncode;bencode不是一个自闭的人,他应该可以向javaeye介绍一下自己。 像这样:js代码ben code.sayHello(;假如不能实现以上功能的话,上面的new ,上面所有的东东都等于垃圾。所以 需要给Person类加实例方法题外话:静态方法如何添加?看上面的Class.create仅仅是一个对象的成员而已 好,再来一段(为了完整性,上面的几句话,再抄一次js代码var Pers on = functi

9、on(n ame this. name = n ame;Person .prototype = / protype 是啥 ?sayHello: function( alert(hi, javaeye, Im + this. name;varbe ncode = new Pers on (be ncode;ben code.sayHello(;运行代码,通过!prototype是啥?请暂时忘记 这个库,名字一样而已!让我们再从结果上去分析(第一次我们用这种方法分析而得出了new的作用,我们在思考:要想ben code.sayHello(正常运行ben code是一个对象,这是我们已经知道的say

10、Hello(应该是be ncode这个对象的方法才可以可是bencode这个对象是new操作符产生的,而new此时作用于Person这个 类那么,哦?那么有两种可能:1. new产生的那个新对象是不是就是 Perso n.prototype2. Person.prototype中的成员将会被new操作符添加到新产生的对象中再看:js代码Pers on .prototype = sayHello: function( alert(hi, javaeye, Im + this. name; / 这里有 thisthis.name,这里的this指什么?所以第一个可能讲不通呀回忆起这段:js代码va

11、r Pers on = function(n ame this. name = n ame;如果这里的this代表着新产生的对象的话那么第二种情况就讲得通了,new将会把Perso n.prototype这个对象的成员放到 这个新对象中。与当前行为相符。所以:Person的Prototype对象中的成员,将会被添加到新产生的对象中俄是这样理解的(不知道Js解释器是不是开源的,有空我得去看看,怎么实现的。嘿默认的Prototype就是Object哦!4. 扩展?继承?什么是扩展?啥是继承? !我从爸爸那得到了什么?想不通!还是实际点:有一个类A,它有一个sayHello方法js代码var A =

12、 fun cti on( A.prototype = sayHello: function( alert(sayHello A我想构造一个B类,让他继承A对象,这句话太抽象其实我们可能想这样:js代码var b = new B(;b.sayHello(; / 调用 A 的 sayHello这应该是继承的第一层含义(重用怎么办到呢?var B = function( / 这里是有一个 B 类了怎么样添加实例方法?快点想起Prototype !B.prototype = A.prototype这样行了吗?恭喜,运行通过!让我们整合一次js代码var A = fun cti on( A.protot

13、ype = sayHello: function( alert(sayHello A;var B = fun cti on( B.prototype = A.prototype;var b = new B(;b.sayHello(;可是如果B是这样呢?js代码var B = fun cti on( B.prototype = sayHi: function( alert(sayHi B;我们是不是应该将A.prototype中的内容添加到B.prototype对象中,而不是代替 它呢?当然。这样才能扩展题外话?多态在哪里?嘿嘿好了,足够多了,那prototype.js是怎么样扩展的呢?js代码

14、Object.exte nd = fun cti on( desti natio n, source for (var property in source desti nati on property = sourceproperty; return destination; 这个只是简单地把source的成员,添加到destination对象中嘛,哪里 看得出扩展? 如果我这样呢?js 代码 var A = fun ctio n( A.prototype = sayHello:fun cti on( alert(sayHello A var B = fun cti on( Object.exte nd(B.prototype, A.prototype; / 先添加父类(A 成员 Object.extend(B.prototype, / 再添加 B 类成员, 如果是同名,则覆盖,行为符合多态sayHi: fun ctio n( alert(sayHi B; ;回忆刚才的 Class.create( js 代码 var Pers on = Class.create(; varbe ncode = new Person(bencode;刚才说过,调用new时,将会创建一个新对象,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号