I followed up on the stack overflow question:
http://stackoverflow.com/questions/41211533/how-to-return-a-new-v8-javascript-class-instance-from-within-c
I believe the answer is that there is a "LexicalEnvironment" (as defined in
the spec) on the context object which stores things like top-level `let`
variables and such.
This is (for some reason) distinct from a global variable, yet accessible
from (nearly?) everywhere just like a global.
On Thursday, January 12, 2017 at 6:31:30 AM UTC-8, Ray Burgemeestre wrote:
>
> Hi there,
>
> I'm using a V8 checkout from the 22nd of October 2016.
>
> My approach is probably wrong in some way, but the following is what I try
> to achieve.
> Compiling and running a script that defines an ES6 class "some_class"...
> my wish is being able to make instances of this class in C++.
>
> I *think* I have to get some kind of handle to "some_class" first, then do
> a NewInstance() on it (or something), but I already get stuck in the first
> part, getting "some_class" from the context.
>
> For example, I have this code:
>
> std::string some_js(R"(
> function foo() {
> //impl
> }
> class some_class {
> constructor() {
> //impl
> }
> };
> )");
>
> // Compile and run above script
> Local<String> source = String::NewFromUtf8(isolate, some_js.c_str(),
> NewStringType::kNormal).ToLocalChecked();
> Local<Script> script = Script::Compile(context, source).ToLocalChecked();
> Local<Value> result = script->Run(context).ToLocalChecked();
>
>
> I can then successfully get the function "foo" from it like this:
>
> Local<String> foo = String::NewFromUtf8(isolate, "foo",
> NewStringType::kNormal).ToLocalChecked();
> Handle<Value> value_foo = context->Global()->Get(foo);
>
>
>
> // At this point: value_foo->IsFunction() == true
>
>
> However, then my attempt to get the class the same way:
>
> Local<String> some_class = String::NewFromUtf8(isolate, "some_class",
> NewStringType::kNormal).ToLocalChecked();
> Handle<Value> value_some_class = context->Global()->Get(some_class);
>
>
>
> // At this point: value_some_class->IsUndefined() == true
>
>
> So it yields 'undefined', I expected at least something.. I found some
> code where new instances were created grepping the V8 tests, but as far as
> I can tell they all construct an object from scratch,
> where I wish to use an existing user defined class.
>
> I have a full test case here:
>
> https://gist.github.com/rayburgemeestre/df6193d532c7b7908fe27c89799bfa3a
>
> Any help pointing me in the right direction would be very appreciated!
>
> Kind regards,
> Ray Burgemeestre
>
--
--
v8-users mailing list
[email protected]
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 [email protected].
For more options, visit https://groups.google.com/d/optout.