I run scripts to extend a 'this', but when that script runs, it just
iniializes this.whatever and provides methods like this.handleMessage =
function() {}

If I want the object initilaized with the script to give me a value, I'd
call a method on the this, but I don't know that the initialization code
would really return any value.  Maybe I'm just biased because I consider
that script a 'constructor()' which doesn't return, but instead just
defines the methods on the object specified....

   var objectForThis = {};
   var script = "   \
            this.method = ()=>{    \
                console.log( "stuff" );    \
               return 6+3; \
             }; \
            var closureVariablesWorkToo = 33; "

    var f = new Function( /* function args */ "JSON", "localStorage",
script );
    f.call( objectForThis, JSON, localStorage /*, ... extra args */ );

    var result1 =   objectForThis.method();



//   ---- This might be a way of providing getter and setter on the 'this'
so you can know if 'myvariable' is accessed...

   var anotherScript = `
       const scriptMethods = {
            method() {
                console.log( "stuff" );
               return 6+3;
             },
             get Getter() {
                     return 'getter value';
             },
             set Getter(val) {
                     console.log( 'save setter value' );
             }
       };

      Object.defineProperties( this, Object.getOwnPropertyDescriptors(
scriptMethods ));  ";


But; go go back to the start, what value would you want to return from a
constructor other than the constructed 'this'?


On Fri, Jun 21, 2019 at 2:56 AM Zoltan B <zbendef...@gmail.com> wrote:

> Thank you!
>
> Also, In the case I'm running a Script (and not a function), if I write
> "myvariable" or "this.myvariable" then is there a way to distuingish
> between the two in the C++ side? Currently how I'm using it is like this:
> The context the script runs in has a global object with my template, so
> that I can provide external name resolution for contexts. However
> "myvariable" and "this.myvariable" both call the same global object, so if
> I could distuingish between the two, I could provide separate name
> resolution for 'this' and contextual variables.
>
> 2019. június 21., péntek 10:01:47 UTC+2 időpontban Caitlin Potter a
> következőt írta:
>>
>> No, that method would still require a return statement. Getting rid of
>> the return statement requirement would need a new API, or transforming the
>> source program before using it.
>>
>> On Jun 21, 2019, at 3:27 AM, Zoltan B <zben...@gmail.com> wrote:
>>
>> Thanks for your answer! :)
>>
>> In the (1) solution of yours, is there a way to be able to create
>> functions that behave like scripts? I mean, that if I write onclick="1+1",
>> then if I parse and run "1+1" as a function it would return 2 without using
>> the "return" keyword (e.g.: "return 1+1")?
>>
>> 2019. június 20., csütörtök 16:04:53 UTC+2 időpontban Caitlin Potter a
>> következőt írta:
>>>
>>> I don’t believe you can do exactly what you want here, as there are two
>>> parts:
>>>
>>> 1) getting `this` set properly. I believe you should be able to use
>>> `CompileFunctionInContext()` to this effect, which is used to provide
>>> implicit arguments to DOM onxxx=“script...” handlers. I believe you can
>>> then make `this` whatever you want in that function. Return statements
>>> would still be legal, as they are in DOM events, though.
>>>
>>> 2) completion value of the script. This is trickier, as the v8 API does
>>> not expose a way to run the AST rewriter on arbitrary functions afaict. It
>>> may be possible to introduce an API for this, if it’s important.
>>>
>>> You might be able to take a third option, transforming the code with a
>>> custom Babel plugin before passing it to v8 (at runtime), and providing the
>>> sourcemap info along with it for debugging purposes.
>>>
>>> On Jun 20, 2019, at 9:49 AM, Zoltan B <zben...@gmail.com> wrote:
>>>
>>> Any ideas? :)
>>>
>>> 2019. június 7., péntek 13:16:08 UTC+2 időpontban Zoltan B a következőt
>>> írta:
>>>>
>>>> Hi!
>>>>
>>>> Is there a way to provide value for the 'this' keyword, when I'm
>>>> running a v8 Script?
>>>>
>>>> An alternative would be to compile the code as a function instead, and
>>>> provide 'this' when calling it trough 'recv', but then I would have other
>>>> issues: running a script like this: "1+1" would not return 2 as a result,
>>>> as I would have to explicitly put a "return" in front of "1+1", so the
>>>> function will return the script's value. This seems to be error prone, not
>>>> to mention that script locations will skew when viewed from DevTools. Using
>>>> "return eval('1+1')" would work, but it kills performance due to the eval.
>>>>
>>>> --
>>> --
>>> v8-users mailing list
>>> v8-u...@googlegroups.com
>>> http://groups.google.com/group/v8-users
>>> ---
>>> You received this message because you are subscribed to the Google
>>> Groups "v8-users" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to v8-u...@googlegroups.com.
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/v8-users/746a4d9f-d364-4506-8783-347eee5dad6c%40googlegroups.com
>>> <https://groups.google.com/d/msgid/v8-users/746a4d9f-d364-4506-8783-347eee5dad6c%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>> --
>> --
>> v8-users mailing list
>> v8-u...@googlegroups.com
>> http://groups.google.com/group/v8-users
>> ---
>> You received this message because you are subscribed to the Google Groups
>> "v8-users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to v8-u...@googlegroups.com.
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/v8-users/edc28096-a090-4188-9828-11ed67ddd6c1%40googlegroups.com
>> <https://groups.google.com/d/msgid/v8-users/edc28096-a090-4188-9828-11ed67ddd6c1%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
>> --
> --
> v8-users mailing list
> v8-users@googlegroups.com
> http://groups.google.com/group/v8-users
> ---
> You received this message because you are subscribed to the Google Groups
> "v8-users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to v8-users+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/v8-users/44b2bf8b-888c-4dc9-bc21-e0b570f4d9c2%40googlegroups.com
> <https://groups.google.com/d/msgid/v8-users/44b2bf8b-888c-4dc9-bc21-e0b570f4d9c2%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>

-- 
-- 
v8-users mailing list
v8-users@googlegroups.com
http://groups.google.com/group/v8-users
--- 
You received this message because you are subscribed to the Google Groups 
"v8-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to v8-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/v8-users/CAA2GJqXPxLWNuN-b%3DVPwJ1c89uYbfe3V7Cg37kF%3DG8cnaexLrA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to