官术网_书友最值得收藏!

Time for action—extending the ShowDog class with the Dog class

Let's see how we can extend our Dog class using the Extends property:

  1. Let's clean up the Dogs class first by removing the things we don't need any more to tidy up our code. We'll delete the .sit() class method, the myDog.bark() call, and the document.write's that we used to show the option property values of myDog. Here's our revised code:
    <html>
    <head>
    <script type="text/javascript" src="mootools-1.2.1-core-nc.js"> </script>
    <script type="text/javascript">
    window.addEvent('domready', function()
    {
    var Dog = new Class(
    {
    Implements : [ Options ],
    options :
    {
    name : 'Barkee',
    type : 'Poodle',
    age : 4
    },
    initialize : function( options )
    {
    this.setOptions( options );
    },
    bark : function()
    {
    alert( this.options.name + ' is barking.' );
    }
    });
    });
    </script>
    </head>
    <body>
    </body>
    </html>
    
  2. Create the ShowDog class right below the Dog class. Use the following code:
    var ShowDog = new Class(
    {
    Extends : Dog,
    options :
    {
    name : 'Xythian'
    },
    initialize : function( options )
    {
    this.parent( options );
    alert( 'I\'m no ordinary dog!' );
    document.write( 'My name is ' + this.options.name + '<br />');
    document.write( 'I\'m a ' + this.options.type + '<br />');
    document.write( 'I\'m ' + this.options.age + '<br />');
    }
    });
    
  3. Instantiate a new ShowDog object, like so:
    var myOtherDog = new ShowDog();
    

    We now have the myOtherDog object, which is an instance of the ShowDog class that extends the Dog class.

  4. Test your HTML document in a browser, and if everything went according to plan, then you should see the following:
    Time for action—extending the ShowDog class with the Dog class

    Then, the next thing you would see is as shown:

    Time for action—extending the ShowDog class with the Dog class

What just happened?

We extended the ShowDogs class with the Dogs class. We did this by using the special class property called Extends, which allows us to assign it the class we're extending it with.

Before we move onto the next topic, we should go over class inheritance a little bit.

Class inheritance

Note that the ShowDogs class takes on properties and methods of its parent class (Dogs) if we don't explicitly define them.

For example, since we already defined an Implements property in Dogs, we need not do it again for ShowDogs. We explicitly defined the name option value (Xythian), when we print the value of it in the document, using the following line:

document.write( 'My name is ' + this.options.name + '<br />');

It printed "My name is Xythian".

However, we didn't explicitly define the type and age option values that we created in the parent class when we performed the following:

document.write( 'I\'m a ' + this.options.type + '<br />');
document.write( 'I\'m ' + this.options.age + '<br />');

The values took on the default property values we set in Dogs (Poodle, and 4).

Have a go hero — doing more with the thing

Why don't you try using the .bark() method that's in the Dog class on the myOtherDog object? What happens? Did it behave like you expected it to?

主站蜘蛛池模板: 宁远县| 成都市| 衡东县| 八宿县| 镇远县| 乐安县| 定兴县| 永川市| 乐清市| 屯留县| 兴仁县| 鹿邑县| 资讯 | 松溪县| 西乌珠穆沁旗| 松潘县| 铁岭县| 曲靖市| 乌拉特后旗| 盐池县| 定日县| 青岛市| 德令哈市| 郑州市| 察雅县| 临漳县| 绩溪县| 会东县| 屏东市| 河曲县| 沈阳市| 霸州市| 寿阳县| 依安县| 厦门市| 聂拉木县| 清涧县| 海宁市| 柳林县| 花莲市| 石阡县|