Rumah  >  Artikel  >  hujung hadapan web  >  Penjelasan terperinci modul VM dalam NodeJs_node.js

Penjelasan terperinci modul VM dalam NodeJs_node.js

WBOY
WBOYasal
2016-05-16 16:00:512065semak imbas

Apakah itu VM?

Modul VM ialah modul teras dalam NodeJS, menyokong kaedah yang diperlukan dan mekanisme pengendalian NodeJS Kadangkala kami juga boleh menggunakan templat VM untuk melakukan beberapa perkara istimewa.

Melalui VM, JS boleh disusun dan dijalankan serta-merta atau disusun, disimpan dan dijalankan kemudian Modul VM mengandungi tiga kaedah yang biasa digunakan untuk mencipta sistem kotak pasir yang dijalankan secara bebas, seperti berikut:
vm.runInThisContext(kod, nama fail);

Kaedah ini digunakan untuk mencipta ruang berjalan kotak pasir bebas Kod dalam kod boleh mengakses objek global luaran, tetapi tidak boleh mengakses pembolehubah lain

Dan kod itu dikongsi secara dalaman dan luaran


Salin kod Kod adalah seperti berikut:
var vm = memerlukan("vm");

var p = 5;
global.p = 11;

vm.runInThisContext("console.log('ok', p)");//Paparan 11
di bawah global vm.runInThisContext("console.log(global)"); // Paparan global

console.log(p);// Paparan 5
vm.runInContext(kod, kotak pasir);

Kaedah ini digunakan untuk mencipta ruang larian kotak pasir bebas akan dihantar sebagai pembolehubah global ke dalam kod, tetapi tiada pembolehubah global

Keperluan SandBox ialah SandBox yang dicipta oleh kaedah vm.createContext()


Salin kod Kod adalah seperti berikut:
var vm = memerlukan("vm");
var util = memerlukan("util");

tetingkap var = {
p: 2,
vm: vm,
konsol: konsol,
​ memerlukan: memerlukan
};

var p = 5;

global.p = 11;

vm.createContext(window);
vm.runInContext('p = 3;console.log(typeof global);', window); // global tidak ditentukan

console.log(window.p);// ditukar kepada 3

console.log(util.inspect(window));
vm.runInNewContext(kod, kotak pasir, opt);

Kaedah ini sepatutnya sama seperti runInContext, tetapi tanpa langkah mencipta sandBox

Bandingkan

Situasi yang lebih kompleks Apakah yang akan berlaku jika runInThisContext dilaksanakan dalam runInContext objek global siapa yang mengakses runInThisContext?

Bagaimana kod berikut akan dilaksanakan?

Salin kod Kod adalah seperti berikut:
var vm = memerlukan("vm");
var util = memerlukan("util");

tetingkap var = {
p: 2,
vm: vm,
konsol: konsol,
​ memerlukan: memerlukan
};

window.global = tingkap;

var p = 5;

global.p = 11;

vm.runInNewContext('p = 3;console.log(typeof global);require('vm').runInThisContext("console.log(p)");', window);

Kod di dalam runInThisContext boleh mengakses objek global luaran, tetapi sebenarnya tiada objek global di luar (walaupun ada, ia pada asasnya bukan objek global). Ingat bahawa runInThisContext hanya boleh mengakses objek global teratas

Keputusan pelaksanaan adalah seperti berikut


objek (wujud global)
11 (p global teratas)


Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn