0

这个问题的评论中,我被告知该.getOwnPropertyDescriptor()方法

ES3 中不支持...,所以它可能在 JScript 中不受支持 [或者]

这确实是我在尝试在cscript.exe/中调用该方法时看到的wscript.exe

对象不支持此属性或方法

但是,我正在使用的最新 JScript 版本是5.812并且根据此文档,该方法应该在5.8*JScript 中可用。在这篇文章中也注意到了差异,指向另一篇文章,其中提供了使用htmlfileCOM 对象的解决方法来访问 Windows 脚本宿主 (WSH) JScript 中缺少的属性/方法。

我想知道是否可以使用相同的方法来访问上述方法也是 WSH JScript。

例如,代码应该是这样的

var object1 = {
  property1: 42
};

var htmlDoc = WScript.CreateObject('htmlfile');

// other code

var descriptor1 = <htmlfileObject>.getOwnPropertyDescriptor(object1, 'property1');
Wscript.StdOut.WriteLine(descriptor1.value);

提前感谢您的支持。

PS我在这里也标记了 VBScript,因为如果有人知道如何在 VBScript 中执行此操作,我们很可能可以轻松地将其转换为 JScript。

4

1 回答 1

3

...但是,我使用的最新 JScript 版本是 5.812 和 ...

实际上那是 Windows Script Host 的版本,而不是引擎 JScript。

在 WSH中,默认情况下,该术语只不过是与标准 ECMA-262 第 3 版兼容的 Microsoft JavaScript 引擎的别名/绰号JScript

除了该默认引擎,您还可以通过指定引擎的 CLSID: 将 Chakra 引擎(需要 Edge)与 WSH 一起使用1b7cd997-e5ff-4932-a7a6-2a9e636da385

测试引擎是否安装在计算机上的命令:

reg QUERY HKCR\CLSID\{1b7cd997-e5ff-4932-a7a6-2a9e636da385} /s

安装了 Chakra 的计算机上的示例输出:

HKEY_CLASSES_ROOT\CLSID\{1b7cd997-e5ff-4932-a7a6-2a9e636da385}
    (Default)    REG_SZ    JScript Language

HKEY_CLASSES_ROOT\CLSID\{1b7cd997-e5ff-4932-a7a6-2a9e636da385}\InprocServer32
    (Default)    REG_SZ    C:\Windows\System32\Chakra.dll
    ThreadingModel    REG_SZ    Both

测试.js:

var object1 = {
  property1: 42
};

var descriptor1 = Object.getOwnPropertyDescriptor(object1, 'property1');

WScript.StdOut.WriteLine(descriptor1.value);

test.js使用 Chakra 引擎运行的命令:

cscript //NoLogo //E:{1b7cd997-e5ff-4932-a7a6-2a9e636da385} test.js

示例输出:

42
于 2020-12-09T12:36:15.817 回答