Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript v8无法从在新上下文中编译的脚本访问属性_Javascript_C++_V8_Embedded V8 - Fatal编程技术网

Javascript v8无法从在新上下文中编译的脚本访问属性

Javascript v8无法从在新上下文中编译的脚本访问属性,javascript,c++,v8,embedded-v8,Javascript,C++,V8,Embedded V8,我创建了一个简单的“require”机制(),其中包含的脚本在新的上下文中编译和运行。但是,当我在包含的脚本中调用函数并将其传递给this时,包含的脚本中看不到任何属性 //required.js-在新上下文中编译并运行 exports.logThis=函数(什么){ 对于(输入什么)日志(输入+”:“+what[key]); } //main.js 记录器=需要(“需要”); this.someProp={some:'prop'} logThis({one:'two'})//工作,打印“一:二

我创建了一个简单的“require”机制(),其中包含的脚本在新的上下文中编译和运行。但是,当我在包含的脚本中调用函数并将其传递给
this
时,包含的脚本中看不到任何属性

//required.js-在新上下文中编译并运行
exports.logThis=函数(什么){
对于(输入什么)日志(输入+”:“+what[key]);
}
//main.js
记录器=需要(“需要”);
this.someProp={some:'prop'}
logThis({one:'two'})//工作,打印“一:二”
logger.logThis(this)//不起作用,什么也不打印。期待“一些:道具”
logger.logThis(this.someProp)//工作,打印“一些:道具”

问题在于V8不允许一个上下文访问另一个上下文的全局变量。因此,logger.logThis(这个)没有打印任何内容

通过在新上下文上设置安全令牌,解决了此问题:

moduleContext->SetSecurityToken(context->GetSecurityToken());

其中context是“main”上下文,moduleContext是包含的脚本运行的新上下文。

什么显示
logger.logThis(this)语句将不显示任何内容。如果我在main.js中为(key in this)log(key)执行操作,那么它将显示该日志的属性(如log函数和someProp)。但是,如果我在required.js中运行相同的代码,那么就不会打印任何内容。这很奇怪,可能是文件错误?