//语法甘露:
        
var object =        
//定义小写的object基本类,用于实现最基础的方法等
        {
                isA:
function(aType)    
//一个判断类与类之间以及对象与类之间关系的基础方法
                {
                        
var self =
this;
                        
while(self)
                        {
                                
if (self == aType)
                                    
return
true;
                                self = self.Type;
                        };
                        
return
false;
                }
        };
        
        
function Class(aBaseClass, aClassDefine)        
//创建类的函数,用于声明类及继承关系
        {
                
function class_()    
//创建类的临时函数壳
                {
                        
this.Type = aBaseClass;        
//我们给每一个类约定一个Type属性,引用其继承的类
                        
for(
var member
in aClassDefine)
                                
this[member] = aClassDefine[member];        
//复制类的全部定义到当前创建的类
                };
                class_.prototype = aBaseClass;
                
return
new class_();
        };
        
        
function New(aClass, aParams)    
//创建对象的函数,用于任意类的对象创建
        {
                
function new_()        
//创建对象的临时函数壳
                {
                        
this.Type = aClass;        
//我们也给每一个对象约定一个Type属性,据此可以访问到对象所属的类
                        
if (aClass.Create)
                            aClass.Create.apply(
this, aParams);    
//我们约定所有类的构造函数都叫Create,这和DELPHI比较相似
                };
                new_.prototype = aClass;
                
return
new new_();
        };
        
//语法甘露的应用效果:        
        
var Person = Class(object,            
//派生至object基本类
        {
                Create:
function(name, age)
                {
                        
this.name = name;
                        
this.age = age;
                },
                SayHello:
function()
                {
                        alert(
"Hello, I'm " +
this.name +
", " +
this.age +
" years old.");
                }
        });
        
        
var Employee = Class(Person,        
//派生至Person类,是不是和一般对象语言很相似?
        {
                Create:
function(name, age, salary)
                {
                        Person.Create.call(
this, name, age);    
//调用基类的构造函数
                        
this.salary = salary;
                },
                ShowMeTheMoney:
function()
                {
                        alert(
this.name +
" $" +
this.salary);
                }
        });
        
var BillGates = New(Person, [
"Bill Gates", 53]);
        
var SteveJobs = New(Employee, [
"Steve Jobs", 53, 1234]);
        BillGates.SayHello();
        SteveJobs.SayHello();
        SteveJobs.ShowMeTheMoney();
        
        
var LittleBill = New(BillGates.Type, [
"Little Bill", 6]);    
//根据BillGate的类型创建LittleBill
        LittleBill.SayHello();
        
        alert(BillGates.isA(Person));            
//true
        alert(BillGates.isA(Employee));        
//false
        alert(SteveJobs.isA(Person));            
//true
        alert(Person.isA(Employee));                
//false
        alert(Employee.isA(Person));                
//true