- 通过 FileUploader 的初始化,了解 SAP UI5
- SAP UI5 OData, annotation这些设计的意义
- 深入学习SAP UI5框架代码系列之一:UI5 Module的懒
- 关于 SAP UI5 参数 $$updateGroupId 前面
- SAP UI5 应用开发教程之四十一 - Chrome 扩展 U
- Chrome 开发者工具 Console 面板里的 VM 是什么
- 通过 SAP UI5 ODataModel API 在 Java
- SAP UI5 Theme Library 的解析逻辑和 SAP
- SAP UI5 设备类型检测 Device API 的工作原理
- SAP UI5 FileUploader 的隐藏 iframe
我们在 SAP UI5 manifest.json 文件里定义的配置信息,通过下图 Manifest.js
文件里的 getObject 函数返回给消费者。
![](https://img.haomeiwen.com/i2085791/4934855534a6fae5.png)
这是一个名为 getObject
的 JavaScript 函数,主要用于通过给定的路径访问对象的子成员。下面是这段代码的中文注释:
/**
* 通过给定路径访问一个对象的子成员的实用函数
*
* @param {object} oObject 对象
* @param {string} sPath 以斜线 (/) 开始的路径
* @return {any} 指定路径的成员的值;
* 如果路径没有以斜线开始,它将返回对象给定路径的值
*/
function getObject(oObject, sPath) {
// 如果传入的 sPath 是一个路径,我们在
// manifest 对象中进行嵌套查找,返回具体的值,例如 "/sap.ui5/extends"
if (oObject && sPath && typeof sPath === "string" && sPath[0] === "/") {
// 通过去除开头的"/"并用"/"来分割剩下的字符串,获取一个路径数组
var aPaths = sPath.substring(1).split("/"),
sPathSegment;
// 遍历路径数组
for (var i = 0, l = aPaths.length; i < l; i++) {
// 获取当前路径段
sPathSegment = aPaths[i];
// 防止访问原生属性
// 如果当前对象有路径段作为属性,则访问该属性,否则返回 undefined
oObject = oObject.hasOwnProperty(sPathSegment) ? oObject[sPathSegment] : undefined;
// 如果值不是对象,则停止查找。
// 不允许访问其他类型的属性!
if (oObject === null || typeof oObject !== "object") {
// 如果这不是路径中的最后一个段,并且对象不为 undefined,则清除值。
// 否则,例如 "/foo/bar/baz" 会在 "/foo/bar" 不是对象的情况下返回 "/foo/bar" 的值。
if (i + 1 < l && oObject !== undefined) {
oObject = undefined;
}
break;
}
}
// 返回查找到的对象
return oObject;
}
// 如果没有指定以斜线开始的路径,我们直接从 manifest 访问并
// 返回值
return oObject && oObject[sPath];
}
这段代码的主要作用是通过给定的路径(字符串形式)从一个对象中获取其子成员的值。路径可以是以斜线("/")开始,也可以直接是对象的属性名。如果是以斜线开始的路径,该函数会递归地在对象中查找对应的属性值;如果直接是属性名,函数会直接返回该属性的值。在寻找路径时,代码还进行了一些错误处理,防止访问到非对象类型的属性,以及防止访问对象的原生属性。
这个函数在处理复杂的嵌套对象时非常有用,尤其是在处理如 JSON 或 XML 这样的数据结构时,可以方便地通过路径获取到深层次的数据。
消费这个函数时,我们需要通过输入参数 sPath
传递一个路径参数去,函数返回这个路径代表的对象值。
网友评论