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; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Keyboard; type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
end; var
Form1: TForm1; implementation {$R *.dfm} uses SuperObject; //方法1; 参数列表是规定好的, 但这里没使用参数
procedure Method1(const This, Params: ISuperObject; var Result: ISuperObject);
begin
ShowMessage('Hello');
end; //方法2; 这里使用了第二个参数; 这里的第二个就是调用时的第一个
procedure Method2(const This, Params: ISuperObject; var Result: ISuperObject);
begin
ShowMessage(Params.AsJSon);
end; //方法3; 这里使用了第一个参数; 第一个参数值使用时无需传递, 它代表使用方法的对象本身
procedure Method3(const This, Params: ISuperObject; var Result: ISuperObject);
begin
ShowMessage(This.AsJSon);
end; //方法4; 这里使用了第三个参数; 这是调用时的返回值, 如果不给它赋值, 调用时将无返回值
procedure Method4(const This, Params: ISuperObject; var Result: ISuperObject);
begin
Result := This;
Result.Merge(Params, True); {合并}
end; //第一种使用方法
procedure TForm1.Button1Click(Sender: TObject);
var
jo: ISuperObject;
begin
jo := SO('{"X":"Y"}');
jo.M['jm1'] := @Method1;
jo.M['jm2'] := @Method2;
jo.M['jm3'] := @Method3;
jo.M['jm4'] := @Method4; jo.call('jm1'); // Hello jo.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);
var
t,jo: ISuperObject;
begin
jo := SO('{"X":"Y"}');
jo.M['jm1'] := @Method1;
jo.M['jm2'] := @Method2;
jo.M['jm3'] := @Method3;
jo.M['jm4'] := @Method4; jo['jm1()']; // Hello jo['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.
XE3随笔6:SuperObject 的 JSON 对象中还可以包含 "方法"的更多相关文章
- jquery获取json对象中的key小技巧
jquery获取json对象中的key小技巧 比如有一个json var json = {"name" : "Tom", "age" : 1 ...
- js 替换json对象中的键名
js 替换json对象中的键名 CreateTime--2018年3月30日15:38:50 Author:Marydon 情景描述: 有个json数组,现在需要将json对象中的key替换掉,值 ...
- JSon 对象转字符的一些方法
引用System.Web.Entity.dll public static string ToJSON(this object obj) { JavaScriptSerializer serializ ...
- 使用 history 对象和 location 对象中的属性和方法制作一个简易的网页浏览工具
查看本章节 查看作业目录 需求说明: 使用 history 对象和 location 对象中的属性和方法制作一个简易的网页浏览工具 实现思路: 使用history对象中的 forward() 方法和 ...
- json对象中的变量存在空格的取值办法
写一个json对象,但需求需要是带空格的键,定义的话很容易定义,只需要双引号引起来即可,但取值的时候怎么取,直接写 会报错,所以就有了下边的办法 <el-form-item label=&quo ...
- json对象与字符串互转方法
字符串转json对象: var data = eval( '(' + str + ')' ); json对象转字符串: var jsonStr = JSON.stringify( obj );
- url地址数据参数转化JSON对象(js三种方法实现)
当我们用get方法提交表单时,在url上会显示出请求的参数组成的字符串,例如:http://localhost:3000/index.html?phone=12345678901&pwd=12 ...
- Tomcat关闭后,重新启动,session中保存的对象为什么还存在解决方法
Tomcat关闭后,重新启动,session中保存的对象为什么还存在各们朋友大家好: 当我关闭Tomcat,重新启动后,session中保存的对象还依然存在,仍然可以使用,不知这是什么 ...
- JS(JQEERY) 获取JSON对象中的KEY VALUE
var json= { "Type": "Coding", "Height":100 }; for (var key in json) { ...
随机推荐
- VS2012打开解决方案崩溃或点击项目崩溃
打开项目文件就VS2012就崩溃 解决方案: 步骤1:开始-->所有程序-->Microsoft Visual Studio 2012-->Visual Studio Tools-- ...
- smarty3与2的差异导致的小问题
又是一天看视频~ 今天在PHP100上学习smartY教程,视频中讲到了在模板文件中直接写带有“{}”JAVASCRIPT脚本会报错,我照视频上的代码写了下来,如下: <script> f ...
- python(24)urlencode和urldecode
当url地址含有中文,或者参数有中文的时候,这个算是很难正常了,但是把这样的url作为参数传递的时候(最常见的callback),需要把一些中文甚至‘/’做一下编码转换. 一.urlencode ur ...
- silverlight列表控件ComboBox 托管代码绑订数据集合
.xaml <ComboBox x:Name="myCombobox" Width="300" Height="30"> < ...
- Zerojudge解题心得
我进入娄山中学已经有1年多了,也就是说我学习编程也有1年多了,在这一年多的时间中,我已经对编程有了初步的了解.其实只要抓住平时的空闲时间加以利用,哪怕每个星期就做那么三四题,经过了一段时间沉淀,也会有 ...
- HDU5900
http://acm.hdu.edu.cn/showproblem.php?pid=5900 就是给出两行数字,每行有若干的数,如果相邻的两个数字的最大公约数不是1 的话拟具可以把这两数删除,并且把第 ...
- Battery Historian for windows环境搭建
Battery Historian for windows环境搭建 简介:Battery historian是一款通过上传bugreport文件分析用户手机中App的电池耗电情况的工具. Batter ...
- EXT学习之——Ext下拉框绑定无效的问题
1.保证store定义是否在combobox前面 2.有没写 .load 3.有没赋值 xxstore:xxstore 具体看详细步骤 http://www.cnblogs.com/wdw3121 ...
- 记一个PowerShell的方法调用 --ResolveWindowsPrincipal
没时间系统的学习PowerShell, 只能现学现用. 这段函数调用花了我半个多小时才搞定. 呵呵. 您别笑我, 呵呵. 在这里个例子里, 包括了PowerShell里如下的一些要点: 静态函数的调用 ...
- Hibernate day02笔记
对象状态与一级缓存 状态介绍 hibernate 规定三种状态:瞬时态.持久态.脱管态 状态 瞬时态:transient,session没有缓存对象,数据库也没有对应记录. ...