新的运营商

时间:2013-07-22 12:56:56

标签: javascript typescript

是否可以编写一个遵循此(有效)打字稿界面的javascript函数:

interface Foo{
    // constructor: 
    new (): string; 
}

即。使用new运算符调用时返回字符串的内容。例如以下方法无效。

function foo(){
    return "something";
} 
var x = new foo(); 
// x is now foo (and not string) whether you like it or not :) 

2 个答案:

答案 0 :(得分:5)

你应该可以这样做:

function foo(){
    return new String("something");
} 
var x = new foo(); 

console.log(x);

您可以返回任何对象,但文字不起作用。见这里:What values can a constructor return to avoid returning this?

答案 1 :(得分:2)

ECMAScript 5的Section 13.2.2(在[[Construct]]内部属性上)可以说明构造函数的返回值:

  

1)让obj成为新创建的本机ECMAScript对象。

     

...

     

8)让result成为调用[[Call]]的{​​{1}}内部属性,提供F作为obj值并提供参数列表的结果作为args传递给this

     

9)如果[[Construct]]Type(result),则返回Object

     

10)返回result

因此,构造函数的返回值只能是一个对象。像obj这样的字符串原语的"foo"结果为Type而不是String。这意味着步骤9为false,因此步骤10返回构造对象,而不是构造函数的返回值。

相反,您必须返回一个对象(Object),详见RobH的回答。