SAPUI5 - JS面向对象继承方式的实现

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值