Flash5ActionScript教程 四十二 |
|||||||||||||
b>使用自定义对象 Flash 5允许用户创建自定义对象,用它来组织某类信息。通过定义该对象的属性和方法,在脚本中就可以很方便地存取其中的信息。在创建主对象或“类”后,你就可以在动画中使用或“实例化”该对象的副本(也就是该对象的实例)。这样,你就可以重用代码,因而减小文件的大小。 对象是一种复杂的数据类型,可以包含多种属性。象变量一样,每种属性都拥有名称和值。属性附属于对象,其值可以被修改和存取。属性的值可以是字符型、数值型、逻辑型、对象、电影剪辑或未定义型。下面的属性属于不同的数据类型: customer.name = "Jane Doe"; customer.age = 30; customer.member = true; customer.account.currentRecord = 000609; customer.mcInstanceName._visible = true; 对象的属性也可以是另一个对象。在上例中的第4行, account是对象customer的属性,currentRecord是对象account的属性。currentRecord属性的数据类型是数值型。或者说,account本身是个对象,它拥有自己的属性currentRecord;account对象也属性,它附属于customer对象。 创建对象 可以用new操作符从构造函数(或称结构体函数)创建对象。构造函数的名字总是与所创建的对象相同。 例如,用来创建account(帐号)对象的结构体的名字应该是Account。下面的语句从称为 MyConstructorFunction的构造函数创建一个新的对象: new MyConstructorFunction (argument1, argument2, ... argumentN); 当 MyConstructorFunction函数被调用时,Flash给它传递一个隐藏的参数this,这个参数是对MyConstructorFunction正在创建的对象的引用。当你定义一个结构体时,参数this使你能够引用该结构体将要创建的对象。例如,下面的函数就是创建circle对象的构造函数: function Circle(radius) { this.radius = radius; this.area = Math.PI * radius * radius; } 构造函数常常被用来填写对象的方法: function Area() { this.circleArea = MAth.PI * radius * radius; } 要在脚本中使用一个对象,必须把该对象赋给一个变量。要创建一个新的半径是5的圆对象,使用new操作符创建该对象,并把它赋给局部变量myCircle: var myCircle = new Circle(5); 注:对象的作用范围与所赋给的变量的作用范围相同。 创建继承 在Flash 5中,所有函数都有一个prototype(原型)属性,该属性在定义函数时自动创建。当使用构造函数创建新的对象时,该结构体的prototype属性的所有属性和方法变成了新对象的__proto__属性的属性和方法。 prototype属性指明了用该函数创建的对象的默认属性值。使用__proto__和prototype属性传递值就称为继承。 继承根据明确的等级进行。当调用对象的属性或方法时,动作脚本首先查看该对象是否拥有该元素。如果该元素不存在,动作脚本查看该对象的__proto__属性以获得相应的信息(对象.__proto__)。如果被调用的属性不是该对象的__proto__对象的属性,动作脚本查看对象.__proto__.__proto__。 通过把方法赋给对象的prototype属性的方式把方法指派给对象是一种常见的做法。下面的步骤说明怎样定义一个范例方法:
也可以通过把方法指派给对象的各个实例的方式,把方法指定给对象,如下例所示: function Circle(radius) { this.radius = radius; this.area = function() { return Math.PI * this.radius * this.radius; } } 这种技术一般不推荐使用。通常,使用prototype对象更有效,因为仅需定义一个area,且该定义被自动拷贝到 Circle函数创建的所有实例中。 prototype属性需要Flash 5和或更高版本支持。 |