mirror of
https://gitlab.com/freepascal.org/fpc/pas2js.git
synced 2025-05-01 19:23:36 +02:00
65 lines
1.9 KiB
ObjectPascal
65 lines
1.9 KiB
ObjectPascal
{ Demo showing how to create a Pascal class descendant from a JS function.
|
|
}
|
|
program ExtendJSFunctionClass1;
|
|
|
|
{$mode objfpc}
|
|
{$ModeSwitch externalclass}
|
|
|
|
uses
|
|
JS, browserconsole;
|
|
|
|
type
|
|
|
|
{ TJSPerson - a JS function, which is used like a class
|
|
Person is declared in the html }
|
|
|
|
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.
|