|
@@ -0,0 +1,61 @@
|
|
|
+program ExtendJSFunctionClass1;
|
|
|
+
|
|
|
+{$mode objfpc}
|
|
|
+{$ModeSwitch externalclass}
|
|
|
+
|
|
|
+uses
|
|
|
+ JS, Classes, SysUtils, Web;
|
|
|
+
|
|
|
+type
|
|
|
+
|
|
|
+ { TJSPerson - a JS function, which is used like a class }
|
|
|
+
|
|
|
+ TJSPerson = class external name 'Person'(TJSFunction)
|
|
|
+ public
|
|
|
+ First: string; external name 'first';
|
|
|
+ Last: string; external name 'last';
|
|
|
+ Age: nativeint; external name 'age';
|
|
|
+ constructor New(aFirst, aLast: string; aAge: nativeint);
|
|
|
+ procedure Run(Value: string); external name 'run';
|
|
|
+ end;
|
|
|
+
|
|
|
+ { TContact - descend a Pascal class from the JS function }
|
|
|
+
|
|
|
+ TContact = class(TJSPerson)
|
|
|
+ public
|
|
|
+ EMail: string;
|
|
|
+ constructor Create(aFirst, aLast: string; aAge: nativeint; aEMail: string); reintroduce;
|
|
|
+ end;
|
|
|
+
|
|
|
+constructor TContact.Create(aFirst, aLast: string; aAge: nativeint;
|
|
|
+ aEMail: string);
|
|
|
+begin
|
|
|
+ inherited New(aFirst,aLast,aAge);
|
|
|
+ EMail:=aEMail;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TestContact;
|
|
|
+var
|
|
|
+ aPerson: TJSPerson;
|
|
|
+ aContact: TContact;
|
|
|
+begin
|
|
|
+ aPerson:=TJSPerson.new('Joe','Smith',23);
|
|
|
+ writeln('TestContact aPerson.First=',aPerson.First,' Last=',aPerson.Last,' Age=',aPerson.Age);
|
|
|
+ // the JS instanceof operator works on the JS object (should be true)
|
|
|
+ writeln('TestContact: aPerson instanceof Person = ',jsInstanceOf(aPerson,TJSPerson));
|
|
|
+ aPerson.Run('TestContact calling aPerson.run');
|
|
|
+
|
|
|
+ aContact:=TContact.Create('Foo','Bar',7,'a@b');
|
|
|
+ writeln('TestContact: aContact.First=',aContact.First);
|
|
|
+ writeln('TestContact: aContact.Last=',aContact.Last);
|
|
|
+ writeln('TestContact: aContact.Age=',aContact.Age);
|
|
|
+ writeln('TestContact: aContact.EMail=',aContact.EMail);
|
|
|
+ // the JS instanceof operator works on the Pascal object (should be true)
|
|
|
+ writeln('TestContact: aContact instanceof Person = ',jsInstanceOf(aPerson,TJSPerson));
|
|
|
+
|
|
|
+ aContact.Run('TestContact called aContact.run');
|
|
|
+end;
|
|
|
+
|
|
|
+begin
|
|
|
+ TestContact;
|
|
|
+end.
|