• Learn JavaScript(面向对象的程序设计01)


      

    最新更新请访问: http://denghejun.github.io

      JavaScript与OOP

         JavaScript作为web前端一种重要的脚本技术,已被大多开发人员所熟知。compare with the other 

         programming language,可能会有很多不同的地方。但据我观察大多数普通程序员仅仅会用script

              做一些简单的工作,例如前端验证、DOM元素查找等。当然,不可否认,有时候似乎我们没有必要把

              script代码编写的太过于复杂或是紧凑。从自我追求上讲,每个程序员都有责任将自己的代码整理的井

              井有条且是有结构化的。OOP的思想是一种迎合自然的思想,它的出现不得不说让我们重新审视自己的

              代码结构。Programming language 一般可以和OOP结合得很完美,所以JavaScript也不例外。今

              天我们将对此进行深入的探索。

      创建对象

          OO的语言很明显的特征是它会有类(class)的概念,通过class,可以创建任意个数的具有相同属性和

              方法的对象实例。

          我们以JavaScript中创建object对象为例,你会发现他是如此简单。

          var car=new object();
    
        car.name="jeep";
    
        car.sayName=function (){
        alert(this.name);
        };
    
        car.sayName();// alert "jeep"

         从上面的代码我们可以看出,Javascript创建对象的关键字是new,这与大多数OO语言相似。我们创建

                car的对象,接着给予它一个name属性和一个sayName方法,以及它的调用方式,一切看起来都是那么

                自然。但是问题总是被隐藏在看似优美的代码中。object是所有对象的base class,我们要创建不同类型

                的对象,势必会产生很多重复代码。进而,我们必须寻求更加完美的编码方式。

        

        工厂

               设计模式中的工厂相比大家都有看过,与之类似,下面的代码将会演示产生car对象的工厂模式。 

    function CreateCar(name)
    {
       var car= new Object();
    
       car.name=name;
    
       car.sayName=function(){
        alert(this.name);
       };
    
    }

                     实际上它看起来也并不复杂,但似乎问题变得更为头疼了,因为每当你调用该方法后,工厂丢给你的对

                     象你并不知道它是什么类型的,这对于OO而言无疑是背道而驰。

      构造函数模式
                            

                     如果你熟悉OO语言的特点,那么你对constructor一定不会陌生。恰巧JavaScript也有。所有的OO语

                     言都是相同的,我甚至经常怀

                     疑他们疑似在互相抄袭。

          构造函数模式能够很好的解决对象类型的问题,例如下边的代码,看起来一定会很不错。

    function Car(name)
    {
    
       this.name=name;
    
       this.sayName=function(){
       alert(this.name);
       };
    
    }
    
    var car1 =new Car("jeep");
    var car2 =new Car("jack");
    
    car1.sayName(); // alert "jeep"
    car2.sayName(); // alert "jack"

                      每个对象都会有一个constructor属性,直接指向构造函数,例如car1.constructor==Car,car2.con

                      structor==Car。在构造函数指向过程中,会有一个作用域的概念,例如构造函数中的this就代表了被创

                      建后的对象,例如car1和car2。

           接下来,我们可以很容易的检测对象的类型了:

        alert(car1 instanceof Object); // true
    
        alert(car1 instanceof Car); //true
    
        alert(car2 instanceof Object); // true
    
        alert(car2 instanceof Car);// true

           构造函数也是一个普通的方法,它任然可以像普通函数一样的调用方式那样被调用:

               像构造函数一样调用:

    var car1 =new Car("jeep");
    car1.sayName(); // "jeep"

              

           像普通函数一样调用:

    Car('jeep'); // 将被注册到window对象中
    window.sayName();// 'jeep'

          在另一个对象的作用域中调用:

      var o= new Object();
      Car.call(o,"jeep");
      o.sayName(); // "jeep"

          没错,就是你看到的那样。

          好了,今天关于OOP&JavaScript就写到这里,如果你已经感受到了巨大的兴趣,请继续关注明天的更新

                   ,明天将会继续探讨构造函数的不足之处和原型模型。

                     希望能与你们一起前行。如有任何疑问均可留言,转载请注明出处,你们的支持将是我持久的动力!

       

  • 相关阅读:
    MacOS下保护浏览器主页和默认搜索
    Tokyo Tyrant(TTServer)系列(一)-介绍和安装
    四:二叉树的镜像递归非递归求解
    Android 异常 android.os.NetworkOnMainThreadException
    Android开发学习之路--传感器之初体验
    Xcode真机调试失败:The identity used to sign the executable is no longer valid
    hdu 3068 最长回文(manacher&最长回文子串)
    bzoj1030【JSOI2007】文本生成器
    HDU2082母函数模板题
    Oracle数据库远程连接配置教程
  • 原文地址:https://www.cnblogs.com/denghejun/p/3642919.html
Copyright © 2020-2023  润新知