浏览v8树,在src
目录下,有一些 js 文件,提供一些基本的 JS 对象,如 Math、Array 等。浏览这些文件,我看到名称中包含百分号 (%) 的标识符,即%Foo
. 我一开始天真地认为这是 JS 标识符中的其他一些允许字符,但是当我在 shell 中尝试它时,它对我大喊大叫,说我违反了语法规则。但是如果是语法错误,那么 d8 是怎么工作的呢?以下是来自实际源代码的示例:
src/apinatives.js 第 44 到 47 行,来自 github/v8/v8 的 git clone
function Instantiate(data, name) {
if (!%IsTemplate(data)) return data;
var tag = %GetTemplateField(data, kApiTagOffset);
switch (tag) {
src/apinatives.js 第 41 到 43 行,来自 github/v8/v8 的 git clone
function SetConstructor() {
if (%_IsConstructCall()) {
%SetInitialize(this);
为什么这个标识符不会产生语法错误。所有 js 文件,包括 math.js 和 string.js 以及所有其他文件?:wq