gpt4 book ai didi

javascript - 使用 JavaScript 手动/人工抛出 DOMException

转载 作者:可可西里 更新时间:2023-11-01 02:41:33 33 4
gpt4 key购买 nike

是否可以在纯 JavaScript 中手动抛出 DOMException 错误? Documentation I've read建议它应该相对容易构建(至少在 Java 中是这样。)

但是,在 Chrome 中,以下代码返回 TypeError: Illegal constructor:

// DOM SYNTAX_ERR (12)
var myDOMException = new DOMException(12,"I'm sorry Dave, I'm afraid I can't do that.");

遗憾的是,这是我看完之后的预期the W3 docs ,它似乎根本没有指定构造函数。 (顺便说一句,虽然我对 IDL 不是特别“熟悉”,但我会假设它们的变体会支持构造函数规范。)

令人沮丧的是,DOMException 类诱人地潜伏在全局范围内。我该如何使用它? 我可以使用它吗?

更新

自从我写这篇文章以来,我有了一些发现 - 即:

var myDOMException = DOMException.constructor(12,"Error Message");
var myDOMException2 = DOMException.constructor.call(DOMException,DOMException.SYNTAX_ERR,"Error Message");

看起来成功了!

...没那么快。

$> myDOMException instanceof DOMException
false
$> myDOMException2 instanceof DOMException
false

可能更令人反感:

$> myDOMException.constructor
function Number() {
[native code]
}

一如既往,我们将不胜感激。

更新#2

只是为了澄清我返回 DOMException 对象而不是更通用的错误的原因 - 我正在尝试实现 WHATWG's Timed Text Track spec在纯 JavaScript 中。在许多情况下,需要适当的解决方案来返回 DOMException 对象,特别是代码为 12 (SYNTAX_ERR.) 的对象。

最佳答案

至少在 Firefox 中,DOMException 不是函数。是an object定义了几个常量。

 typeof DOMException === 'object' // true (not 'function')

可以这样使用:

try {
throw DOMException;
} catch(e) {
if (e === DOMException)
console.log("caught DOMException")
}

如果您尝试发出 DOMException 信号但不需要 DOMException 的实际实例,则此方法有效。

丑陋的骇人听闻的黑客(基本上有效)

如果您确实需要一个具有SYNTAX_ERR 代码的DOMException 实例,您可以执行一个操作,导致创建一个实例并抛出 那个:

function createSyntaxException() {
try {
// will cause a DOMException
document.querySelectorAll("div:foo");
} catch(e) {
return e;
}
}

throw createSyntaxException();

抛出异常的细节当然不会与您的具体情况相匹配,但生成的对象将具有正确的代码并通过 instanceof 检查。

var e = createSyntaxException();
console.log(e instanceof DOMException); // true
console.log(e.code === e.SYNTAX_ERR); // true

您可以通过子类化 DOMException 并为其每个(只读)属性添加 getter/setter 来缓解细节问题。

function DOMExceptionCustom() {
var message;
this.__defineGetter__("message", function(){
return message;
});
this.__defineSetter__("message", function(val){
message = val;
});
}

// subclass DOMException
DOMExceptionCustom.prototype = createSyntaxException();

var err = new DOMExceptionCustom();
err.message = "my custom message";

生成的对象具有所需的属性:

console.log(err.code === err.SYNTAX_ERR); // true
console.log(err.message); // "my custom message"
console.log(err instanceof DOMExceptionCustom); // true
console.log(err instanceof DOMException); // true

关于javascript - 使用 JavaScript 手动/人工抛出 DOMException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5136727/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com