`
zcdxzsz
  • 浏览: 73270 次
  • 来自: ...
社区版块
存档分类
最新评论

[转]javascript 面向对象特性与编程实现

阅读更多
  在  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 = “prop1”;

       this.prop2 =”prop2”;

       this.fun1 = function()

{

       ……

}

}




上面代码声明了两个公有属性,和一个方法。大家都知道类里除了公有成员还可能还有一些私有成员变量,但是 javascript 并没有提供相应的机制来定义私有成员变量,不过利用一些 javascript 的小技巧就可以实现私有成员变量。如下:

function test1 ()

{

       var prop3 = “test”;

       this.prop1 = “prop1”;

       this.prop2 =”prop2”;

       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 = “prop1”;

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 )

        {

            destination [ pro ] = source [ pro ];

        }

        return destination ;

    }

    // 一个基类

   

    function base (){}

    base . prototype =

    {

        f1 : function ()

        {

            this . oninit ();

        }

    }

    // 扩展1

    function test1 ()

    {


       

    }

    test1 . prototype = Object . extend (

    {

        prop : "prop" ,

        oninit : function ()

        {

            alert ( this . prop );

        }

    }, base . prototype );

    // 扩展2

    function test2 ()

    {

       

    }

    test2 . prototype = Object . extend (

    {

        prop2 : "prop2" ,

        oninit : function ()

        {

            alert ( this . prop2 );

        }

    }, base . prototype );

   

    // 测试

    var t1 = new test1 ();

    t1 . f1 ();

    var t2 = new test2 ();

    t2 . f1 ();

   

</ script >
分享到:
评论

相关推荐

    JavaScript面向对象编程指南

    如何实现JavaScript中缺失的面向对象特性,如对象的私有成员与私有方法;如何应用适当的编程模式,发挥JavaScript语言特有的优势;如何应用设计模式解决常见问题等。, 《JavaScript面向对象编程指南》着重介绍...

    JavaScript面向对象编程指南.pdf

    如何实现JavaScript中缺失的面向对象特性,如对象的私有成员与私有方法;如何应用适当的编程模式,发挥JavaScript语言特有的优势;如何应用设计模式解决常见问题等。 《JavaScript面向对象编程指南》着重介绍...

    javascript面向对象编程

    JavaScript作为一门浏览器语言的核心思想;...如何实现JavaScript中缺失的面向对象特性,如对象的私有成员与私有方法;如何应用适当的编程模式,发挥JavaScript语言特有的优势;如何应用设计模式解决常见问题等。

    JavaScript的面向对象特性浅析与范例

    传统方式对JavaScript的应用基本上是基于过程模型的,若在JavaScript中利用面向对象的思想进行代码编写,将会使得代码具有良好的结构和逻辑性,更便于管理和...本文让读者看到JavaScript如何实现面向对象编程并提供范例

    JavaScript面向对象编程指南 英文版

    如何实现JavaScript中缺失的面向对象特性,如对象的私有成员与私有方法;如何应用适当的编程模式,发挥JavaScript语言特有的优势;如何应用设计模式解决常见问题等。 《JavaScript面向对象编程指南》着重介绍...

    JavaScript面向对象编程指南 有书签

    如何实现JavaScript中缺失的面向对象特性,如对象的私有成员与私有方法;如何应用适当的编程模式,发挥JavaScript语言特有的优势;如何应用设计模式解决常见问题等。 《JavaScript面向对象编程指南》着重介绍...

    JavaScript面向对象编程

    Javascript是一种面向(基于)对象的动态脚本语言,是一种基于对象(Object)和事件驱动 (EventDriven)并具有安全...javascript的面向对象特性,要使用好 ext技术, javascript的面向对象语言特性是我们必须完全把握的。

    JavaScript 面向对象编程指南

    适合有一定javascript开发基础的读者,从javascript语言的内部运行特性去阐述javascript的开始。

    JavaScript面向对象编程指南(第2版)

    1.本书是唯一一本介绍JavaScript面向对象编程的图书。, 2.本书作者是知名的Web开发人员和作者。受到国内众多前端开发人员,如淘宝UED团队的推崇和推荐。 Stoyan Stefanov:Facebook公司工程师、作家、演说家。他经常...

    JavaScript程序设计课件:面向对象概述.pptx

    面向对象有封装、继承、多态性的特性,所以具有易维护、易复用、易扩展的特点。 类的调用需要实例化,开销较大,因此性能方面较面向过程低。 6.1.1 面向过程与面向对象 6.1 面向对象概述 主讲:重庆机电职业技术大学...

    Javascript面向对象编程

    javascript的特点 简单 动态 基于对象(面向对象) Javascript面向对象概述 Javascript是一种面向(基于)对象的动态脚本语言,是一种基于对象(Object)和事件驱动(EventDriven)并具有安全性能的脚本语言。他具有面向...

Global site tag (gtag.js) - Google Analytics