[JavaScript基础教程]创建自己的对象

要创建自己的对象实例,必须首先为其定义一个构造函数。构造函数创建一个新对象,赋予对象属性,并在合适的时候赋予方法。例如,下面的示例为 pasta 对象定义了构造函数。注意 this 关键字的使用,它指向当前对象。

  1. // pasta 是有四个参数的构造器。 
  2. function pasta(grain, width, shape, hasEgg) 
  3.     // 是用什么粮食做的? 
  4.     this.grain = grain; 
  5.  
  6.     // 多宽?(数值) 
  7.     this.width = width;      
  8.  
  9.     // 横截面形状?(字符串) 
  10.     this.shape = shape;    
  11.  
  12. // 是否加蛋黄?(boolean) 
  13.     this.hasEgg = hasEgg;   

定义了对象构造器后,用 new 运算符创建对象实例。

  1. var spaghetti = new pasta("wheat", 0.2, "circle"true); 
  2. var linguine = new pasta("wheat", 0.3, "oval"true); 

可以给对象实例添加属性以改变该实例,但是用相同的构造器生成的其他对象定义中并不包括这些属性,而且除非你特意添加这些属性那么在其他实例中并不显示出来。如果要将对象所有实例的附加属性显示出来,必须将它们添加到构造函数或构造器原型对象(原型在高级文档中讨论)中。

  1. // spaghetti 的附加属性。 
  2. spaghetti.color = "pale straw"
  3. spaghetti.drycook = 7; 
  4. spaghetti.freshcook = 0.5; 
  5.  
  6. var chowFun = new pasta("rice", 3, "flat"false);  
  7. // chowFun 对象或其他现有的 pasta 对象 
  8. // 都没有添加到 spaghetti 对象 
  9. // 的三个新属性。 
  10.  
  11.  
  12. // 将属性‘foodgroup’加到 pasta 原型对象 
  13. // 中,这样 pasta 对象的所有实例都可以有该属性, 
  14. // 包括那些已经生成的实例。 
  15. pasta.prototype.foodgroup = "carbohydrates" 
  16.  
  17. // 现在 spaghetti.foodgroup、chowFun.foodgroup,等等 
  18. // 均包含值“carbohydrates”。 

在定义中包含方法

可以在对象的定义中包含方法(函数)。一种方法是在引用别处定义的函数的构造函数中添加一个属性。例如,下面的示例扩充上面定义的 pasta 构造函数以包含 toString 方法,该方法将在显示对象的值时被调用。

  1. // pasta 是有四个参数的构造器。 
  2. // 第一部分与上面相同。 
  3. function pasta(grain, width, shape, hasEgg) 
  4.     // 用什么粮食做的? 
  5.     this.grain = grain; 
  6.  
  7.     // 多宽?(数值) 
  8.     this.width = width;      
  9.  
  10.     // 横截面形状?(字符串) 
  11.     this.shape = shape;    
  12.  
  13.     // 是否加蛋黄?(boolean) 
  14.     this.hasEgg = hasEgg;   
  15.  
  16.     // 这里添加 toString 方法(如下定义)。 
  17.     // 注意在函数的名称后没有加圆括号; 
  18.     // 这不是一个函数调用,而是 
  19.     // 对函数自身的引用。 
  20.     this.toString = pastaToString; 
  21.  
  22. // 实际的用来显示 past 对象内容的函数。  
  23. function pastaToString() 
  24.     // 返回对象的属性。 
  25.  
  26.     return "Grain: " + this.grain + "\n" + 
  27.         "Width: " + this.width + "\n" + 
  28.         "Shape: " + this.shape + "\n" + 
  29.         "Egg?: " + Boolean(this.hasEgg); 
  30.  
  31. var spaghetti = new pasta("wheat", 0.2, "circle"true); 
  32. // 将调用 toString() 并显示 spaghetti 对象 
  33. // 的属性(需要Internet 浏览器)。 
  34. window.alert(spaghetti); 

转载请注明:代码家园 » [JavaScript基础教程]创建自己的对象

评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)