gpt4 book ai didi

javascript - 在javascript中,NEW函数是否有可能返回NULL?

转载 作者:行者123 更新时间:2023-11-28 16:29:15 25 4
gpt4 key购买 nike

函数可以返回 null,但是有没有办法让函数的 new 实例返回 null?

例如,在这个愚蠢的代码中(严格用于说明目的)

var f = function(j) { if( j > 5 ) return null; this.j = j; };for( var f1=f(1); f1; f1=f(fi.j) ) {   ...}

代码没有做的是让 new f() 返回 null - 看起来当 new 时返回值只是被丢弃了。这里 new f() 除了 __proto__ 之外根本没有胆量,但拒绝使自己无效。

寻找一个没有胆量的“对象”被返回是合理的选择吗?如果是这样,事先不知道“对象”应该是什么样子,测试这个的最佳方法是什么?

<小时/>

解决方案:

考虑到 javascript 的 new 不能失败 - 它必须返回一个对象并且不能返回 null(请参阅下面的答案!),恕我直言,完成该示例的正确方法:

var F = function(i) { if( i > 5 ) throw( 'tooMuch' ); this.i = i; }try {    for( var f = new F(1); true; f = new F(f.i) ) {      ...   }} catch( er ) { null; }

这使用throw/catch进行循环控制 - 不是我喜欢的,但是iterators上的新javascript规范使用了相同的机制,所以我可能需要对自己思考“抛出异常”,而不是“抛出错误”。

最佳答案

ou CAN 返回您的自己的对象,而不是 new 给出的对象> - 但请记住它必须是一个对象 - null 不会这样做 - 尽管讽刺的是 typeof null 也是 object

function F(x) {
if (x < 10) return new Number(0);

this.x = x;
}

现在你可以做你的事情了...

for ( var i = 1, k = new F(i); k; k = new F(++i) ) {
// dance .~.~.~.
}

关于javascript - 在javascript中,NEW函数是否有可能返回NULL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6746657/

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