Hi, folks. I just write Ox.Class, which provides a convenient way to
write OO in JavaScript, and it supports multiple inheritance, too. You
may get the code at http://pygments.org/demo/485/ , and here's my
brief tutorial:

1. Define the class:

    Person = Ox.Class(object, {

       '__init__': function (name) {
            this.name = name
       },
       'say': function (msg) {
            return "I'm " + this.name + '. ' + msg
       }
    })

   This is an Ox.Class-type class. Actually, the basic declaration of
an

   empty class of this type is Ox.Class(object), the object is a basic

   class defined by Ox.Class. All class you define should inherit the

   'object' class, although it's still ok if you don't. There is an
'object'

   class for inheriting because Ox.Class is inspired by "Python"
programming

   language. As you can see next, I defined a '__init__' method, it
acts as

   a constructor of this class. Ox.Class uses the name '__init__' is
followed

   by Python convention, too.

2. Create an object instance:

    john = new Person('John')  // just like how it should be in
JavaScript

    john.say('Hello')  // should return "I'm John, Hello."

3. Inheritance

    Pirate = Ox.Class(Person, {

        'say': function (msg) {
            return "I'm " + this.name ', a pirate. ' + msg
        }
    })

   Now I defined a class inherits from Person, we pop up "object"
because

   Person already inherts object, so in theory object is Pirate's

   parent's parent. Now see what effects.

    hook = new Pirate("Hook")

    hook.say('How are you?')  // return "I'm Hook, a pirate. How are
you?"


4. Multiple Inheritance

   Ox.Class also provides multiple inheritance that JavaScript
essentially

   not support. First, I defined another class:

    Gender = Ox.Class(object, {
        '__init__': function () {
            this.gender = 'female'
        }
    })

   Then defined a class which inherits two class, Person and Gender:

    Girl = Ox.Class(Person, Gender, {
        'say': function () {
            return "My name is " + this.name + ", I'm " + this.gender
        }
    })

   See? That's pretty simple. You just need to put all the classes you
want

   to inherit before your methods. All things you need to know is that
classes

   which on left side have higher priority than right side. In this
case,

   Person has higher priority than Gender.

    sheri = new Girl('Sheri')

    sheri.say()  // return "My name is Sheri, I'm female"

5. Use Parent's method

   It is possible to use parent's method. To achieve this, we need to
know

   where the method is and in which class. For example, we may modify
the

   Pirate class to:

    Pirate = Ox.Class(Person, {
        'say': function (msg) {
            return Person.prototype.say.apply(this, arguments) +
                   " I'm a pirate."
        }
    }

    hook = new Pirate()

    hook.say('Hello.')  // should return "I'm Hook. Hello. I'm a
pirate."

   It's a little tricky. We use the JavaScript's built-in "apply"
method

   to pass our arguments to the parent's method. keep in mind one
thing,

   for referring to the method in class, we need to specify the
'prototype'

   between the class name and the method name. Don't forget JavaScript
is

   a prototype-based OO programing language.

   In Ox.Class, it supports to use "pt" to replace the long word
"prototype".

   In this case, we may change the example line to:

    return Person.pt.say.apply(this, arguments) + " I'm a pirate."

   It's still not clear, may I'll have a better implement in feature

   release. However, Hope Ox.Class helps you. :)


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"MochiKit" group.
To post to this group, send email to mochikit@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/mochikit?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to