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之间的关系是创建与被创建的关系,这种关系是面向对象中最重要的一种关系,它是“泛化”关系的一个特例。

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

原文地址:https://www.cnblogs.com/xinzhuangzi/p/4100589.html