zoukankan      html  css  js  c++  java
  • javascript王者归来类和对象

    我们对JavaScript对象已经并不陌生,下面的例子展示了三种构造对象的方法:

           例: 21.1 对象的三种基本构造法

           //第一种构造法:new Object

    var a = new Object();

           a.x = 1, a.y = 2;

           //第二种构造法:对象直接量

           var b = {x : 1, y : 2};

           //第三种构造法:定义类型

           function Point(x, y)

           {

                  this.x = x;

                  this.y = y;

           }

           var p = new Point(1,2);

           其中,第一种方式是通过实例化一个Obejct来生成对象,第二种方式是通过对象常量,而第三种方式比较特殊,我们先构造了一个function,这个 function代表了一“类”特殊的对象,这类对象描述二维平面上的点,new Point(1,2)表示二维平面上坐标为(1,2)的点,要得到二维平面上坐标为(3,4)的点则可以用new Point(3,4)。

           现在我们比较一下这三种方法的差别,第一种方法是通过构造基本对象直接添加属性的方法来实现的。我们说JavaScript是一种弱类型的语言,一方面体 现在JavaScript的变量、参数和返回值可以是任意类型,另一方面也体现在,JavaScript可以对对象任意添加属性和方法,这样无形中就淡化 了“类型”的概念。例如:

           var a1 = new Object();

           var a2 = new Object();

           a1.x = 1, a1.y = 2;

           a2.x = 3, a2.y = 4, a2.z = 5;

           你既没有办法说明a1、a2是同一种类型,也没有办法说明它们是不同的类型,而在C++和Java中,变量的类型是很明确的,在声明时就已经确定了它们的类型和存储空间。

           第二种方法和第一种方法大同小异,实际上你可以将它看成是第一种方法的一种快捷表示法。

           比较有趣的是第三种方法:

           function Point(x,y)

           {

                  this.x = x;

                  this.y = y;

           }

    var p1 = new Point(1,2);

    var p2 = new Point(3,4);

    你现在知道了p1和p2是同一种类型,它们都是Point的实例。而对于p1和p2来说,Point是它们的“类”,p1、p2和Point之间的关系是创建与被创建的关系,这种关系是面向对象中最重要的一种关系,它是“泛化”关系的一个特例。

    通常我们在讨论面向对象时,构造对象时采用的是上面第三种方法,因为“创建”是面向对象中不可缺少的一种“泛化”关系。

  • 相关阅读:
    责任链模式
    状态模式
    命令模式
    策略模式
    迭代器模式
    适配器模式
    装饰模式
    合成模式
    brew php 提示
    sarafi浏览器iframe跨域cookie无效的处理方案(笨方法,看官莫笑)
  • 原文地址:https://www.cnblogs.com/xinzhuangzi/p/4100589.html
Copyright © 2011-2022 走看看