为什么可以';JavaScript构造函数创建字符串还是数字?
假设我有一些构造函数:为什么可以';JavaScript构造函数创建字符串还是数字?,javascript,Javascript,假设我有一些构造函数: function Foo() { } function FooObject() { return {} } function FooArray() { return [] } function FooFunction() { return function () {} } function FooString() { return '' } function FooNumber() { return 1337 } 我用它们来创建一些对象: new Foo() // cr
function Foo() { }
function FooObject() { return {} }
function FooArray() { return [] }
function FooFunction() { return function () {} }
function FooString() { return '' }
function FooNumber() { return 1337 }
我用它们来创建一些对象:
new Foo() // creates Foo instance
new FooObject() // creates object
new FooArray() // creates array
new FooFunction() // creates function
这些都是有道理的,但字符串和数字最终只是作为实例,为什么
new FooString() // creates FooString instance: WAT
new FooNumber() // creates FooNumber instance: WAT
这是为什么?以下是您感兴趣的行为描述: 调用函数对象F的[[Construct]]属性时 采取了以下步骤:
JavaScript中的字符串和数字是不可变的。而且,由于
new
操作符实例化了一个作为给定构造函数实例的新对象,因此得到的是一个对象而不是原语值。如果在没有new
操作符的情况下调用这些函数,您将获得预期的基本值
请参阅。只是一个问题:您是否有意和有意识地使用
new
?看,这不是一个沉重的问题;我只是想让你意识到它的含义。。。首先,不要那样做。构造函数应该用于创建构造函数类型的实例,而不是返回原语。从构造函数返回原语没有任何意义。。。构造函数返回对象。function FooString(){返回新字符串(“”)}
:)@Cuberto这不是问题所在。我知道没有理由这么做。我想问的是,为什么语言会有这样的表现。这里最重要的是第7步。可能值得强调;)“new操作符总是实例化一个新对象,该对象是给定构造函数的实例”--你确定吗?