JS.Class - 1. Classes & Inheritance
2009-10-13 00:00:00 来源:WEB开发网嗯~~~ 这应该说是创建一个类对象,而非类定义。JSON 方式看上去简洁美观,JS.Class 接收一个定义对象来完成 Class 定义。initialize 可以理解为实例初始化方法 (.ctor),它包含了构造一个对象所需的参数/属性。调用代码完全类似 C#/Java 风格,熟悉的 new 关键字以及成员调用。
创建一个继承子类同样很简单。
var Manager = new JS.Class(User,
{
initialize : function(name, address)
{
this.callSuper();
this.address = address;
},
address : "UnKnown",
test : function()
{
alert(this.name);
},
show : function(content)
{
content += " (Manager)";
this.callSuper(content);
}
});
var user = new Manager("Tom");
user.age = 30;
user.sex = "Female";
var info = user.getInfo();
user.show(info);
JS.Class 通过接收基类对象和新增成员对象两个参数来创建子类。除了新增成员外,我们还可以 override 基类的方法。这里面出现了一个 callSuper() 方法,作用类似 C# 里面的 base,它可以自动处理方法参数并调用基类方法。不过需要注意的是,如果我们修改了参数,那么必须显式添加调用参数。
看看不显示添加调用参数的结果。
show : function(content)
{
content += " (Manager)";
this.callSuper();
}
输出:
<User>
Name: Tom; Age: 30; Sex: Female
子类的初始化方法不是必须的,但如果需要,同样可以重写。
JS.Class 还允许我们创建静态方法 (static method),这是其他 JavaScript OO 模型所没有的。
var User = new JS.Class(
{
initialize: function(name)
{
this.name = name;
},
extend:
{
getInfo: function(user)
{
return user.name;
},
show: function(s)
{
alert(s);
}
}
});
var Manager = new JS.Class(User,
{
initialize : function(name, age)
{
this.callSuper(name);
this.age = age;
},
extend:
{
getInfo : function(user)
{
return this.callSuper() + ";" + user.age;
}
}
});
var manager = new Manager("Tom", 31);
var info = Manager.getInfo(manager);
Manager.show(info);
使用 extend 包含所有的静态成员,子类会自动继承基类的静态方法,并可以改写。静态方法使用类变量调用而非实例变量,这也是我们所熟悉的。
编缉推荐阅读以下文章
- JS.Class - 3. Modules & Mixins
- JS.Class - 2. Methods & Types
更多精彩
赞助商链接