第一章 可继承的类

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");
...

results matching ""

    No results matching ""