SAP UI5 框架 Manifest.js 里 getObject 函数的实现解析

简介: SAP UI5 框架 Manifest.js 里 getObject 函数的实现解析

我们在 SAP UI5 manifest.json 文件里定义的配置信息,通过下图 Manifest.js 文件里的 getObject 函数返回给消费者。

db21f65aaf4458a353f2580bb292c2c7.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 传递一个路径参数去,函数返回这个路径代表的对象值。

相关文章
|
1天前
|
JavaScript
变量和函数提升(js的问题)
变量和函数提升(js的问题)
|
1天前
|
开发框架 前端开发 JavaScript
学会Web UI框架--Bootstrap,快速搭建出漂亮的前端界面
学会Web UI框架--Bootstrap,快速搭建出漂亮的前端界面
|
2天前
|
存储 JavaScript 前端开发
每日一道javascript面试题(九)函数的参数可以和函数体中的变量重名吗
每日一道javascript面试题(九)函数的参数可以和函数体中的变量重名吗
|
2天前
|
JavaScript 前端开发
每日一道javascript面试题(七)你真的知道箭头函数吗
每日一道javascript面试题(七)你真的知道箭头函数吗
|
3天前
|
敏捷开发 开发框架 持续交付
【软件工程】航行敏捷之路:深度解析Scrum框架的精髓
【软件工程】航行敏捷之路:深度解析Scrum框架的精髓
|
6天前
|
JavaScript 前端开发
js开发:请解释什么是ES6的Generator函数,以及它的用途。
ES6的Generator函数是暂停/恢复功能的特殊函数,利用yield返回多个值,适用于异步编程和流处理,解决了回调地狱问题。例如,一个简单的Generator函数可以这样表示: ```javascript function* generator() { yield &#39;Hello&#39;; yield &#39;World&#39;; } ``` 创建实例后,通过`.next()`逐次输出&quot;Hello&quot;和&quot;World&quot;,展示其暂停和恢复的特性。
16 0
|
13天前
|
缓存 JavaScript 前端开发
js的入口函数,入口函数的作用
js的入口函数,入口函数的作用
16 4
|
17天前
|
SQL API 数据库
Python中的SQLAlchemy框架:深度解析与实战应用
【4月更文挑战第13天】在Python的众多ORM(对象关系映射)框架中,SQLAlchemy以其功能强大、灵活性和易扩展性脱颖而出,成为许多开发者首选的数据库操作工具。本文将深入探讨SQLAlchemy的核心概念、功能特点以及实战应用,帮助读者更好地理解和使用这一框架。
|
18天前
|
JavaScript 前端开发 API
框架分析(3)-Vue.js
框架分析(3)-Vue.js
|
18天前
|
JavaScript 前端开发
JS的入口函数,并讲解入口函数的作用
JS的入口函数,并讲解入口函数的作用
9 0

推荐镜像

更多