Introduction to Classes and Object Ortented Programming

出自OpenFace

跳转到: 导航, 搜索

Prev                                                                           Next

                             第十一章 类和面向对象编程介绍

                               第二部分  教程介绍  


目录

介绍

  LZX是面向对象,以原型继承为基础,能创建自定义和重复使用的class从而能减少代码。

  这一章告诉您如何去定义和实例化类,以及如何使用它。<class>标签用于定义类,使用时需要实例化该类。

Example 11.1. 一个简单类的例子

<canvas width="500" height="80">
 <class name="MyClass" width="80" height="25" bgcolor="#CFD9AB">
   <text>Hello, World!</text>
 </class>
 
 <MyClass name="myFirstInstance"/>
</canvas>

  <class>标签定义了类,<MyClass>标签实例化了该类。类中定义的一切通过创建它的实例而被继承,也就是说,Myclass的实例继承了: 'width'属性值为 80,'height' 属性值为25,'bgcolor',还有一些text,该实例命名为"myFirstInstance", 同样的我们可以命名一个view。

  在这个例子中,类中只有一个元素(<text> 元素),但是类可以包含很多对象,例如,view(视图)可以包含很多子视图。


id属性

  注意不在类的定义中定义id属性是很重要的,因为每个id都应该是唯一的。ids 是全局的,如果你要在类的定义中包含定义id属性,那么类的多个实例就会产生几个相同id的视图,这会产生不可预知的行为。

继承

  如上所述,<MyClass>的实例会继承它,由于我们在类的定义时没有指明x,y的位置,这不意味着我们不可以通过实例给它们赋值。

  该实例具有象视图一样行为,事实上,是由于我们继承了view类,默认情况下,<class> 继承view类。

<class name="MyClass">


… 相同…

<class name="MyClass" extends="view">

  由此得到你可以继承你想要继承的任何类的结论:

Example 11.2. 继承<text>

<canvas width="500" height="80">
 <class name="SpecialButton" extends="text" oninit="changeLabel()">
   <method name="changeLabel">
       this.setAttribute('text', 'First! ');
   </method>
 </class>
 <SpecialButton>Now second</SpecialButton>
</canvas>

  在实例中属性,方法可以重写:


Example 11.3. 重写方法

<canvas width="500" height="80">
 <class name="SpecialButton" extends="text" oninit="changeLabel()">
   <method name="changeLabel">
     this.setAttribute('text', 'First!');
   </method>
 </class>
 <simplelayout axis="y" spacing="10"/>
 <SpecialButton>Not First</SpecialButton>
 <SpecialButton>
   Now second!
   <method name="changeLabel">
     this.setAttribute('text', 'Smashing!');
   </method>
 </SpecialButton>
</canvas>

  使用自定义和预定义的类时重写方法都是非常方便的,但并不适合类的不同实例需要不同参数的情况。

属性

  之前已经使用过属性,但这些是我们在类中继承的已有的属性,前面提到过,能够在创建类的实例时传递参数是很有用处的:

Example 11.4. 定义类的属性

<canvas width="500" height="80">
 <class name="SpecialButton" extends="text" oninit="changeLabel()">
   <attribute name="changeToLabel" value="First!" type="string"/>
   <method name="changeLabel">
     var newLabel = this.getAttribute('changeToLabel');
     this.setAttribute('text', newLabel);
   </method>
 </class>
 <simplelayout axis="y" spacing="10"/>
 <SpecialButton>Now Next</SpecialButton>
 <SpecialButton changeToLabel="Thank You!">show me!</SpecialButton>
</canvas>

  如果给attriubte标签设置value属性的值,那么该值就是它的默认值,这样在实例化时如果没有设定值,它就采用这个值作为缺省的值。

重复继承

  可以多次继承一个类,例如,一个应用可以包含多种text:

Example 11.5. 重复继承

<canvas width="800" height="300">
   <class name="MyText" extends="text" oninit="changeLabel()">
       <method name="changeLabel">
           this.setAttribute('text', 'First! ');
       </method>
   </class>
   <class name="MySpecialText" extends="MyText"/>
   <view name="t" x="15" y="5">
       <simplelayout axis="y" spacing="10"/>
       <MyText>MyText</MyText>
       <MySpecialText oninit="changeLabel()"/>
   </view>
</canvas>




                                      Home

Prev                                                                           Next