XE3随笔6:SuperObject 的 JSON 对象中还可以包含 方法
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 对象中还可以包含 方法相关推荐
- 检查密钥是否存在于json对象中
本文翻译自:Check if a key exists inside a json object amt: "10.00" email: "sam@gmail.com&q ...
- JSON对象中的函数调用,JSON格式的字符串对应的函数调用方法
json对象中的函数调用:直接使用 json变量名+函数名+()进行调用,特别注意这对括号:如果是获取到的json格式的字符串,想要调用它的方法前,需要先将该字符串转换成json对象,在调用对应的方法 ...
- 如何替换json对象中的key
来源 | https://www.cnblogs.com/jaxu/archive/2021/06/01/14836088.html 看到标题你可能会想,如此简单的问题值得去探究吗?如果我有一个jso ...
- JS-JSON-获取JSON对象中的数据展示到表格里
JS-JSON-获取JSON对象中的数据展示到表格里 1.要求 点击按钮,将学生信息展示到表格里,并显示总记录条数. 2.实现思路 创建JSON对象 先创建一个JSON对象data,有总人数total ...
- 移除Java对象中的属性_移除/添加 JSON对象中的某个属性
因为JSON完全是动态的,所以给一个JSON对象添加一个属性是很简单的,如: var json = {}; json.username='xtayfjpk'; 这样就为json对象添加了一个名为use ...
- JS 遍历JSON对象中的键值对
对象:一组无序属性的集合,属性的值可以是任意的类型: json也是对象,数据都是成对的,也就是键值对: json实际上就是一组格式化后的字符串数据. 遍历JSON对象中的数据,可通过for-in循环实 ...
- python封装:隐藏对象中的属性或方法(三分钟读懂)
封装:隐藏对象中的属性或方法 隐藏对象中的属性 隐藏:- 将对象的属性名,修改为一个外部不知道的名字 我们使用时,有特殊方法来处理获取(修改)对象中的属性 获取(修改)对象中的属性 需要提供一个get ...
- 使用 history 对象和 location 对象中的属性和方法制作一个简易的网页浏览工具
查看本章节 查看作业目录 需求说明: 使用 history 对象和 location 对象中的属性和方法制作一个简易的网页浏览工具 实现思路: 使用history对象中的 forward() 方法和 ...
- 这样写,才可以让JS对象中的key包含短横杠-
这样写,才可以让JS对象中的key包含短横杠- 在定义对象时,如果直接将包含短横杠-的字符串作为对象的key,JS会报错: const o = {v-red: 1 // 报错 SyntaxError: ...
最新文章
- 2018-3-10论文(网络评论非结构化信息表示与应用研究)笔记-----基于证据理论的综合评价模型建立
- 从事IT行业需要了解到
- leetcode-----给出两个二叉树,请写出一个判断两个二叉树是否相等的函数。
- 青蛙跳台阶问题(思路与蜂窝问题一致)
- AtCoder AGC032F One Third (组合计数、DP、概率期望、微积分)
- ITK:将高斯噪声添加到特定图像
- 使用 greenDao 框架 操作数据库
- html删除一行增加一行,html怎么增加一行
- 开发们 点广告-赚点BT币
- 云+X案例展 | 民生类:中国电信天翼云携手国家天文台打造“大国重器”
- activex for chrome扩展程序 下载”_Chrome扩展程序一键生成网页骨架屏
- CentOS 7设置开机启动服务,添加自定义系统服务(Redis为例,绝对有效)
- 关于Mysql5.5在关键字方面的变化
- 关于面试!(简历篇)
- Spring Boot 2.x 切换 Servlet 嵌入式容器 Tomcat、Jetty、Undertow
- html5页面登录页面,html5练习——登录页面
- dhtmlx技术使用总结与介绍中文手册
- Java SE 007 流程控制语句 续
- golang 的chan 信道与并发
- Rstudio永久修改当前工作路径