Javascript构造函数返回值

时间:2016-02-10 09:27:39

标签: javascript javascript-events

请考虑以下代码:

function Foo() {
  return "something";
}

var foo = new Foo(); 

根据JavaScript专家的说法,他们说回归"什么都没有"或者只是"这个"来自构造函数。这是什么原因?

我知道当使用" new"时,"这个"将被设置为构造函数的原型对象,但不能单独理解这一点。

2 个答案:

答案 0 :(得分:3)

该特定代码将抛出ReferenceError,因为未声明something

你应该在构造函数函数中return this或者根本没有return语句,否则你将构造一个新的类实例(this的值,以及默认的返回值)然后扔掉它。

  

我知道当使用" new"时,"这个"将被设置为构造函数的原型对象

不正确的。它将被设置为构造函数的一个实例。

答案 1 :(得分:1)

当执行代码new Foo(...)时,会发生以下情况:

1-创建一个新对象,继承自Foo.prototype

2-使用指定的参数调用构造函数Foo,并将其绑定到新创建的对象。 new Foo等价于new Foo(),即如果没有指定参数列表,则不带参数调用Foo。

3-构造函数返回的对象成为整个新表达式的结果。如果构造函数没有显式返回对象,则使用在步骤1中创建的对象。 (通常构造函数不会返回值,但如果他们想要覆盖正常的对象创建过程,他们可以选择这样做。)

function Car() {}
car1 = new Car();

console.log(car1.color);    // undefined

Car.prototype.color = null;
console.log(car1.color);    // null

car1.color = "black";
console.log(car1.color);   // black

您可以找到完整的说明Here