odoo的js繼承機制解讀

2021-06-25 10:00:51 字數 996 閱讀 4435

前文說過,odoo前端js中openerp這個物件是所有物件的根,其他的物件都是由openerp這個物件繼承而來。下面我們解讀下他的js機制。

odoo實現繼承的**在openerpframework.js第97行-188行這段**中定義。

注意:繼承這部分**中有兩個class,乙個是openerp.class,乙個是extend中定義的class,openerp.class的作用是在extend中呼叫時生成乙個空物件例項,然後把引數中定義的方法填充到這個物件中,並且這個物件會賦給extend中定義的class的prototype。

opener.class.extend方法會返回乙個class的方法定義,函式開始這幾行是處理引數,因為extend()方法允許傳遞多個物件作為引數,所以需要先把這些物件裡面定義的方法重組成乙個array。

接下來這部分**的作用是new乙個新的openerp.class物件,這個空物件會被填充引數中定義的方法。

遍歷引數中的每個方法定義,新增到剛生成的prototype物件中去:

這個class是作為extend方法的返回值,呼叫extend方法時返回的物件就是這個class,

class.include的作用是把引數中定義的函式新增到class中去,可以實現對該物件的擴充套件。

把剛才new出來的openerp.class作為extend方法內定義的class的prototype,也就是說在使用new生成物件例項時,新生成的物件例項就具備了引數中定義的所有方法。

把openerp.class的extend方法賦給class的extend,使新定義的class也可以實現繼承。

下面看乙個具體的繼承例子:

1、首先呼叫extend方法,此時方法返回乙個class的方法定義,也就是說session物件是乙個方法定義,並非乙個物件例項,在該方法定義中,openerp.propertiesminxin,triggers這些引數中定義的物件會被新增到class的prototype中去。

2、new乙個新的session物件例項

Odoo中的JS繼承機制

odoo中js的繼承有什麼用?odoo中有相當多的檢視,掛件等元件,在產品擁有個性化定製需求的時候,我們要修改某些widgets或者classes,那麼就需要理解odoo中前端框架的js架構,並且掌握繼承js的方法。js繼承方法 var new class demo class.extend 使用e...

JS原型繼承與物件機制

假設讓classb繼承classa 讓classb的prototype 含有三個值,自定義屬性方法,constructor,proto 目標 1.classb擁有classa的屬性方法,classb可以有自己的額外屬性 2.classb的父級是a 3.class b的構造器是自己的 過程 屬性 父級...

js繼承的四種方式超詳細解讀

對於不熟悉js原型的小白,可以先去看下這篇js原型和原型鏈 有利於下面對於js繼承方式的理解。在es6以前是沒有類這些概念的,所以在繼承方式上要從原型上開始。一 原先鏈繼承 function father father.prototype.say function 這裡其實可以把父原型物件傳給子原型...