使用 htmlfile COM 对象访问 WSH JScript 中对象的 .getOwnPropertyDescriptor() 方法

Using htmlfile COM object to access the .getOwnPropertyDescriptor() method of an object in WSH JScript

this question的评论中,我被告知.getOwnPropertyDescriptor()方法

isn't supported in ES3 ..., so it probably isn't supported in JScript [either]

这确实是我在 cscript.exe/wscript.exe:

中尝试调用该方法时所看到的

Object doesn't support this property or method

但是,我使用的最新 JScript 版本是 5.812,根据 this document, the method should be available in 5.8* JScript. The discrepancy has also been noted in this post, pointing towards ,其中提供了使用 htmlfile COM 对象的解决方法来访问丢失的 properties/methods 在 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);

在此先感谢您的支持。

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

... However, the latest JScript version I'm using is 5.812 and ...

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

在 WSH 中,术语 JScript 默认 只不过是与标准 ECMA-262 兼容的 Microsoft JavaScript 引擎的别名/名字第三版。

除了该默认引擎外,您还可以通过指定引擎的 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

test.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