diff --git a/utils/pas2js/docs/translation.html b/utils/pas2js/docs/translation.html index 2c50e04b1f..910620f468 100644 --- a/utils/pas2js/docs/translation.html +++ b/utils/pas2js/docs/translation.html @@ -2799,10 +2799,11 @@ End. <div class="section"> <h2 id="externalclassancestor">External class as ancestor</h2> - A Pascal class can descend from an external class.<br> + A Pascal class can descend from an external class - a JS object or function.<br> The methods <i>AfterConstruction</i> and <i>BeforeDestruction</i> are called if they exist.<br> - New instances are created by default with <i>Object.create(ancestorclass)</i>.<br> + New instances of a JS Object descendant are created by default with <i>Object.create(ancestorclass)</i>.<br> + New instances of a JS Function descendant are created by default with <i>new DescendantFunc()</i>.<br> You can override this, by providing a<br> <b>class function NewInstance(fnname: string; const paramsarray): TPasClass; virtual;</b>. This method is called to create a new instance and before calling the constructor. @@ -2817,19 +2818,22 @@ End. </tr> <tr> <td> -<pre>Program MyModule; +<pre> +// Example for descending a Pascal class from a JS Object +Program MyModule; {$modeswitch externalclass} type TExtA = class external name 'ExtA' end; TMyB = class(TExtA) protected + // optional: override default allocation class function NewInstance(fnname: string; const paramarray): TMyB; virtual; end; class function TMyB.NewInstance(fnname: string; const paramarray): TMyB; Begin asm - Result = Object.create(ExtA); + Result = Object.create(ExtA); // that is what the rtl does end; End; @@ -2854,6 +2858,55 @@ End. $mod.$main = function () { }; }); +</pre> + </td> + </tr> + </tbody> + </table> + <table class="sample"> + <tbody> + <tr> + <th>Pascal</th> + <th>JavaScript</th> + </tr> + <tr> + <td> +<pre> +// Example for descending a Pascal class from a JS Function +Program MyModule; +{$modeswitch externalclass} +uses JS; +type + TExternalFunc = class external name 'ExternalFunc'(TJSFunction) + constructor New(a: word); + end; + TMyFunc = class(TExternalFunc) + constructor Create(b: word); + end; +constructor TMyFunc.Create(b: word); +Begin + inherited New(b+1); // optional: call inherited constructor function +End; + +Begin +End. +</pre> + </td> + <td> +<pre>rtl.module("program",["System","js"],function () { + var $mod = this; + rtl.createClassExt($mod, "TMyFunc", ExternalFunc, "", function () { + this.$init = function () { + }; + this.$final = function () { + }; + this.Create$2 = function (b) { + this.$ancestorfunc(b+1); + }; + }); + $mod.$main = function () { + }; +}); </pre> </td> </tr>