Node.js vm.createContext() 方法
vm.createContext()方法用于创建可用于运行多个脚本的单个上下文。此外,如果指定的contextObject被忽略,则返回一个新的空上下文对象。但是,如果随后声明了 contextObject ,则此方法将准备好该对象,以便可以在调用vm.runInContext()或script.runInContext()时使用它。其中contextObject将是此类脚本中的全局对象,可以保留其活动属性。在脚本之外,它由 vm 模块运行,甚至全局变量也保持不变。
句法:
vm.createContext( contextObject, options )
参数:此方法接受上面提到的两个参数,如下所述:
- contextObject:它是被上下文化的对象。
- options:它是可选的并返回Object 。
返回值:它返回上下文对象。
以下示例说明了 Node.js 中createContext() 方法的使用:
示例 1:
Javascript
// Node.js program to demonstrate the
// vm.createContext([contextObject[, options]])
// method
// Including util and vm module
const util = require('util');
const vm = require('vm');
// Assigning value to the global variable
global.globalVar = 10;
// Defining Context object
const object = { globalVar: 4 };
// Contextifying stated object
// using createContext method
vm.createContext(object);
// Compiling code
vm.runInContext('globalVar /= 2;', object);
// Displays the context
console.log("Context: ", object);
// Displays value of global variable
console.log("Global Variable is ", global.globalVar);
Javascript
// Node.js program to demonstrate the
// vm.createContext([contextObject[, options]])
// method
// Including util and vm module
const util = require('util');
const vm = require('vm');
// Assigning value to the global variable
global.globalVar = 5;
// Defining Context object
const object = { globalVar: 20 };
// Contextifying stated object
// using createContext method
vm.createContext(object);
// Compiling code
vm.runInContext('globalVar += 2;', object);
// Displays the context
console.log("Context: ", object);
// Displays value of global variable
console.log("Global Variable is ", global.globalVar);
输出:这里,上下文中的 globalVar 为 2,输出为 (4/2 = 2),但 globalVar 的值仍为 10。
Context: { globalVar: 2 }
Global Variable is 10
示例 2:
Javascript
// Node.js program to demonstrate the
// vm.createContext([contextObject[, options]])
// method
// Including util and vm module
const util = require('util');
const vm = require('vm');
// Assigning value to the global variable
global.globalVar = 5;
// Defining Context object
const object = { globalVar: 20 };
// Contextifying stated object
// using createContext method
vm.createContext(object);
// Compiling code
vm.runInContext('globalVar += 2;', object);
// Displays the context
console.log("Context: ", object);
// Displays value of global variable
console.log("Global Variable is ", global.globalVar);
输出:这里,上下文中的 globalVar 是 22,输出为 (20+2 = 22) 但 globalVar 的值仍然是 5。
Context: { globalVar: 22 }
Global Variable is 5
参考: https://nodejs.org/api/vm.html#vm_vm_createcontext_contextobject_options