如何在DWScipt中初始化对象?

问题描述

请问DWScript中此JS代码的等效内容是什么? 我使用DWScript代码生成器。

// JavaScript:
DoIt({name:"Fred",size:{width:3,height:2}});

我尝试了匿名记录,但似乎不起作用:

var obj: variant;
    obj := record
      Name = 'Fred';
      Size: variant = record
         Width = 3;
        Height = 2;
      end;
    end;

使用DWScript Codegen生成的JS代码是:

var obj = undefined,/// anonymous TRecordSymbol
      function copy$a$460(s,d) {
         return d;
      }
      function Clone$a$460($) {
         return {

         }
      }
      function Pub$a$460($) {
         return {
            "Name":$.Name$8,"Size":$.Size$5
         }
      }
      /// anonymous TRecordSymbol
      function copy$a$461(s,d) {
         return d;
      }
      function Clone$a$461($) {
         return {

         }
      }
      function Pub$a$461($) {
         return {
            "Width":$.Width$4,"Height":$.Height$2
         }
      }
      obj = {Name$8:"Fred",Size$5:3};
      alert(JSON.stringify(obj));

解决方法

我会给你一个例子来帮助你回答你自己的问题

首先,创建一个新类型,类似于:

type
  TDimensions = record
  published
    Width: integer;
    Height: integer;
  end;

接下来,您需要以某种方式使用它。想象一下,您单击一个按钮,从几个输入字段中收集了一堆数据,您对输入进行了清理并发送了它。作为开始使用类似的东西:

procedure TForm1.ButtonClickHandler(Sender: TObject);
var
  dimensions: TDimensions;
  payload: Variant;
  serialized: String;
begin
  dimensions.width := StrToInt(self.W3EditBox2.Text);
  dimensions.height := StrToInt(self.W3EditBox3.Text);

  payload := TVariant.CreateObject;
  payload.name := self.W3EditBox1.Text;
  payload.size := dimensions;

  asm
    @serialized = JSON.stringify(@payload);
  end;

  writeln(serialized);
end;