javascript - 共享内置原型(prototype)的 Node JavaScript 上下文?

标签 javascript node.js v8

当使用 Node 的 vm.runInNewContext 创建新上下文时,内置(ObjectFunction 等)原型(prototype)共享或不是吗?

关于 runInNewContext 的文档说:

Running code does not have access to local scope and the object sandbox will be used as the global object for code.

Object.prototype 是否在全局范围内,因此不共享?

node_script.cc:338-345node_script.cc:403-409 中,我看到它在引用对象,那些也是来自 sandbox 的对象,使用调用 vm.runInNewContext 的父上下文的 Object.prototype 和使用不同的在新上下文中创建的对象Object.prototype?

(注:vm模块是一个迷宫:vm模块->evalsprocess.binding->node_script.cc源代码)

最佳答案

据我所知,代码是在一个全新的上下文中运行的,对象、数组等具有不同的全局构造函数。

Object.prototype.a = function() { console.log('hello'); };
({}).a(); // 'hello'
require('vm').runInNewContext('({}).a();'); // should throw

如果 Object::a 可以访问原始上下文中的变量,我认为它真的不会成为新上下文。

虽然这有一些含义:

vm.runInNewContext('[];') instanceof Array; // returns false

因为该数组是使用完全不同的构造函数创建的,所以 instanceof 运算符将受到影响。

关于javascript - 共享内置原型(prototype)的 Node JavaScript 上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5875193/

相关文章:

javascript - nodejs提交多个请求时请求内存泄漏错误

javascript - 如何设置连接多方上传文件的名称?

javascript - Node js 'readline' - 接近堆限制的无效标记压缩分配失败

ruby - 来自 rails 3 中 therubyracer/v8 的 javascript 错误的堆栈跟踪

javascript - 从 Promise 的 Promise 中获取数据以及其他数据 (promise.all)

javascript - 尝试设置超时来显示和隐藏球

node.js - 如何 stub Node aws-sdk的.promise()方法

Javascript向上箭头按键不触发

JavaScript - 字符串正则表达式反向引用

javascript - 有什么方法可以拦截 v8 上下文的全局对象中的函数定义吗?