第一章 可继承的类
odoo前端使用了John Resig的"Simple JavaScript Inheritance"技术,并在此技术上进行了优化,作为OWL之前的技术基石。SJI的主要特点是简单的类创建和继承、子类的实例化和保留了父级方法。
类的创建
使用SJI创建一个类非常简单:
var Person = Class.extend({
init: function(isDancing){
this.dancing = isDancing;
},
dance: function(){
return this.dancing;
}
});
要创建一个类只需要使用Class.extend方法,然后使用init方法进行初始化。init这里可以简单的理解为构造函数。
子类的继承
如上例,我们想要继承Person,那么可以像下面这样写:
var Ninja = Person.extend({
init: function(){
this._super( false );
},
dance: function(){
// Call the inherited version of dance()
return this._super();
},
swingSword: function(){
return true;
}
});
这样就继承了Person类,每个继承的子类,都可以通过_super方法调用父类的方法。
子类的重写
odoo在SJI的基础上又新增了一个include方法,其作用是方便在子模块对父模块内的对象进行重载,而不用再创建一个子类进行覆盖。
例如:
var Person = require("demo.Person");
Person.include({
start: function(){
...
}
});
这里我们并没有新建一个子类,而是直接在子模块中通过include方法对父类的start方法进行了重载。
SJI在odoo中被封装在了web.Class模块中,后续在使用过程中可以像下面这样:
var Class = require("web.Class");
...