创建自己的对象
要创建自己的对象实例必须首先为其定义一个构造函数构造函数创建一个新对象赋予对象属性并在合适的时候赋予方法例如下面的示例为 pasta 对象定义了构造函数注意 this 关键字的使用它指向当前对象
// pasta 是有四个参数的构造器
function pasta(grain width shape hasEgg)
{
// 是用什么粮食做的?
thisgrain = grain;
// 多宽?(数值)
thiswidth = width;
// 横截面形状?(字符串)
thisshape = shape;
// 是否加蛋黄?(boolean)
thishasEgg = hasEgg;
}
定义了对象构造器后用 new 运算符创建对象实例
var spaghetti = new pasta(wheat circle true);
var linguine = new pasta(wheat oval true);
可以给对象实例添加属性以改变该实例但是用相同的构造器生成的其他对象定义中并不包括这些属性而且除非你特意添加这些属性那么在其他实例中并不显示出来如果要将对象所有实例的附加属性显示出来必须将它们添加到构造函数或构造器原型对象(原型在高级文档中讨论)中
// spaghetti 的附加属性
lor = pale straw;
spaghettidrycook = ;
spaghettifreshcook = ;
var chowFun = new pasta(rice flat false);
// chowFun 对象或其他现有的 pasta 对象
// 都没有添加到 spaghetti 对象
// 的三个新属性
// 将属性foodgroup加到 pasta 原型对象
// 中这样 pasta 对象的所有实例都可以有该属性
// 包括那些已经生成的实例
pastaprototypefoodgroup = carbohydrates
// 现在 spaghettifoodgroupchowFunfoodgroup等等
// 均包含值carbohydrates
在定义中包含方法
可以在对象的定义中包含方法(函数)一种方法是在引用别处定义的函数的构造函数中添加一个属性例如下面的示例扩充上面定义的 pasta 构造函数以包含 toString 方法该方法将在显示对象的值时被调用
// pasta 是有四个参数的构造器
// 第一部分与上面相同
function pasta(grain width shape hasEgg)
{
// 用什么粮食做的?
thisgrain = grain;
// 多宽?(数值)
thiswidth = width;
// 横截面形状?(字符串)
thisshape = shape;
// 是否加蛋黄?(boolean)
thishasEgg = hasEgg;
// 这里添加 toString 方法(如下定义)
// 注意在函数的名称后没有加圆括号
// 这不是一个函数调用而是
// 对函数自身的引用
thistoString = pastaToString;
}
// 实际的用来显示 past 对象内容的函数
function pastaToString()
{
// 返回对象的属性
return Grain: + thisgrain + \n +
Width: + thiswidth + \n +
Shape: + thisshape + \n +
Egg?: + Boolean(thishasEgg);
}
var spaghetti = new pasta(wheat circle true);
// 将调用 toString() 并显示 spaghetti 对象
// 的属性(需要 Internet 浏览器)
windowalert(spaghetti);