SapUI5面向对象使用的继承方式与阮一峰老师在博客中介绍的”构造函数式的继承“的"利用空对象作为中介" 原理相同
首先上一张自己画的ui5的最底层的继承关系图
在sapui5中需要构造一个JS的“class", 需要从最底层的Metadata开始
找到resources/sap/ui/base/Metadata-dbg.js中的createClass方法:
Metadata.createClass = function (fnBaseClass, sClassName, oClassInfo, FNMetaImpl) {
... ...
if ( fnBaseClass ) {
... ...
// create prototype chain
fnClass.prototype = jQuery.sap.newObject(fnBaseClass.prototype);
fnClass.prototype.constructor = fnClass;
// enforce correct baseType
oClassInfo.metadata.baseType = fnBaseClass.getMetadata().getName();
}
... ...
}
当baseClass存在时,会将subClass的prototype设为baseClass的prototype
找到resources/jQuery.sap.global-debug.js
jQuery.sap.newObject = function newObject(oPrototype) {
return new (jQuery.sap.factory(oPrototype))();
};
jQuery.sap.factory = function factory(oPrototype) {
function Factory() {}
Factory.prototype = oPrototype;
return Factory;
};
这里的factory方法使用到了利用空对象作为中介,继承baseClass的prototype来构造一个新的subClass
本文详细解读了SapUI5中的继承方式,并将其与阮一峰老师的构造函数式的继承进行对比。通过分析Metadata.createClass方法和jQuery.sap.newObject函数,展示了如何利用空对象作为中介构造新的子类。文章提供了SapUI5底层继承关系的图表,并解释了在创建JS类时从Metadata开始的重要性。

688

被折叠的 条评论
为什么被折叠?



