请考虑以下代码:
function Foo() {
return "something";
}
var foo = new Foo();
根据JavaScript专家的说法,他们说回归"什么都没有"或者只是"这个"来自构造函数。这是什么原因?
我知道当使用" new"时,"这个"将被设置为构造函数的原型对象,但不能单独理解这一点。
答案 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