It depends on the security policy. By default, everything is shared.
You can turn on access checks with
v8::ObjectTemplate::SetAccessCheckCallback() to block access on a
per-property basis or disallow sharing altogether by changing the
security token with v8::Context::SetSecurityToken().
Aside: I believe the reason you need to pass a context to
v8::Object::Set() is to disambiguate the overloaded function. C++
doesn't allow overloading on just the return type.
It's also slightly faster. The non-context version of Set() looks up
the current context and calls the contextified Set().