SuperObject 的 JSON 对象中还可以包含 "方法", 这太有意思了; 其方法的格式是:

procedure Method(const This, Params: ISuperObject; var Result: ISuperObject);//另外, 这是其数据类型的枚举:
TSuperType = (stNull, stBoolean, stDouble, stInt, stObject, stArray, stString, stMethod);

测试代码:


unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, Keyboard;typeTForm1 = class(TForm)Button1: TButton;Button2: TButton;procedure Button1Click(Sender: TObject);procedure Button2Click(Sender: TObject);end;varForm1: TForm1;implementation{$R *.dfm}uses SuperObject;//方法1; 参数列表是规定好的, 但这里没使用参数
procedure Method1(const This, Params: ISuperObject; var Result: ISuperObject);
beginShowMessage('Hello');
end;//方法2; 这里使用了第二个参数; 这里的第二个就是调用时的第一个
procedure Method2(const This, Params: ISuperObject; var Result: ISuperObject);
beginShowMessage(Params.AsJSon);
end;//方法3; 这里使用了第一个参数; 第一个参数值使用时无需传递, 它代表使用方法的对象本身
procedure Method3(const This, Params: ISuperObject; var Result: ISuperObject);
beginShowMessage(This.AsJSon);
end;//方法4; 这里使用了第三个参数; 这是调用时的返回值, 如果不给它赋值, 调用时将无返回值
procedure Method4(const This, Params: ISuperObject; var Result: ISuperObject);
beginResult := This;Result.Merge(Params, True); {合并}
end;//第一种使用方法
procedure TForm1.Button1Click(Sender: TObject);
varjo: ISuperObject;
beginjo := SO('{"X":"Y"}');jo.M['jm1'] := @Method1;jo.M['jm2'] := @Method2;jo.M['jm3'] := @Method3;jo.M['jm4'] := @Method4;jo.call('jm1');                      // Hellojo.call('jm2', SO('{"A":"B"}'));     // {"A":"B"}jo.call('jm2', '{"A":"B"}');         // {"A":"B"}jo.call('jm3');                      // {"X":"Y"}jo.call('jm4', '{"B":null}');ShowMessage(jo.AsJSon);              // {"X":"Y","B":null}
end;//第二种使用方法
procedure TForm1.Button2Click(Sender: TObject);
vart,jo: ISuperObject;
beginjo := SO('{"X":"Y"}');jo.M['jm1'] := @Method1;jo.M['jm2'] := @Method2;jo.M['jm3'] := @Method3;jo.M['jm4'] := @Method4;jo['jm1()'];                           // Hellojo['jm2(' + '{"A":"B"}' + ')'];        // {"A":"B"}jo['jm2({A:B})'];                      // {"A":"B"}jo['jm3()'];                           // {"X":"Y"}jo['jm4(' + '{"B":null}' + ')'];ShowMessage(jo.AsJSon);                // {"X":"Y","B":null}
end;end.

转载于:https://www.cnblogs.com/DaXiong2000/p/4726364.html

XE3随笔6:SuperObject 的 JSON 对象中还可以包含 方法相关推荐

  1. 检查密钥是否存在于json对象中

    本文翻译自:Check if a key exists inside a json object amt: "10.00" email: "sam@gmail.com&q ...

  2. JSON对象中的函数调用,JSON格式的字符串对应的函数调用方法

    json对象中的函数调用:直接使用 json变量名+函数名+()进行调用,特别注意这对括号:如果是获取到的json格式的字符串,想要调用它的方法前,需要先将该字符串转换成json对象,在调用对应的方法 ...

  3. 如何替换json对象中的key

    来源 | https://www.cnblogs.com/jaxu/archive/2021/06/01/14836088.html 看到标题你可能会想,如此简单的问题值得去探究吗?如果我有一个jso ...

  4. JS-JSON-获取JSON对象中的数据展示到表格里

    JS-JSON-获取JSON对象中的数据展示到表格里 1.要求 点击按钮,将学生信息展示到表格里,并显示总记录条数. 2.实现思路 创建JSON对象 先创建一个JSON对象data,有总人数total ...

  5. 移除Java对象中的属性_移除/添加 JSON对象中的某个属性

    因为JSON完全是动态的,所以给一个JSON对象添加一个属性是很简单的,如: var json = {}; json.username='xtayfjpk'; 这样就为json对象添加了一个名为use ...

  6. JS 遍历JSON对象中的键值对

    对象:一组无序属性的集合,属性的值可以是任意的类型: json也是对象,数据都是成对的,也就是键值对: json实际上就是一组格式化后的字符串数据. 遍历JSON对象中的数据,可通过for-in循环实 ...

  7. python封装:隐藏对象中的属性或方法(三分钟读懂)

    封装:隐藏对象中的属性或方法 隐藏对象中的属性 隐藏:- 将对象的属性名,修改为一个外部不知道的名字 我们使用时,有特殊方法来处理获取(修改)对象中的属性 获取(修改)对象中的属性 需要提供一个get ...

  8. 使用 history 对象和 location 对象中的属性和方法制作一个简易的网页浏览工具

    查看本章节 查看作业目录 需求说明: 使用 history 对象和 location 对象中的属性和方法制作一个简易的网页浏览工具 实现思路: 使用history对象中的 forward() 方法和 ...

  9. 这样写,才可以让JS对象中的key包含短横杠-

    这样写,才可以让JS对象中的key包含短横杠- 在定义对象时,如果直接将包含短横杠-的字符串作为对象的key,JS会报错: const o = {v-red: 1 // 报错 SyntaxError: ...

最新文章

  1. 2018-3-10论文(网络评论非结构化信息表示与应用研究)笔记-----基于证据理论的综合评价模型建立
  2. 从事IT行业需要了解到
  3. leetcode-----给出两个二叉树,请写出一个判断两个二叉树是否相等的函数。
  4. 青蛙跳台阶问题(思路与蜂窝问题一致)
  5. AtCoder AGC032F One Third (组合计数、DP、概率期望、微积分)
  6. ITK:将高斯噪声添加到特定图像
  7. 使用 greenDao 框架 操作数据库
  8. html删除一行增加一行,html怎么增加一行
  9. 开发们 点广告-赚点BT币
  10. 云+X案例展 | 民生类:中国电信天翼云携手国家天文台打造“大国重器”
  11. activex for chrome扩展程序 下载”_Chrome扩展程序一键生成网页骨架屏
  12. CentOS 7设置开机启动服务,添加自定义系统服务(Redis为例,绝对有效)
  13. 关于Mysql5.5在关键字方面的变化
  14. 关于面试!(简历篇)
  15. Spring Boot 2.x 切换 Servlet 嵌入式容器 Tomcat、Jetty、Undertow
  16. html5页面登录页面,html5练习——登录页面
  17. dhtmlx技术使用总结与介绍中文手册
  18. Java SE 007 流程控制语句 续
  19. golang 的chan 信道与并发
  20. Rstudio永久修改当前工作路径

热门文章

  1. 最强的windows2003安全设置
  2. 3.4.1 流量控制与可靠传输机制
  3. FPGA 中 IO 口时序分析(Input Delay /output Delay)
  4. 编程珠玑第七章 粗略估算
  5. linux java 替换jre_Linux系统 无需JRE配置Java
  6. 人工智能带来的事业浪潮或将提前到来
  7. matplotlib 中子图的创建
  8. 几道有意思的逻辑分析题
  9. 记一次金士顿DT100 G3 32G修复
  10. SDL2源代码分析8:视频显示总结