1. 构造函数
- 构造函数名字的第一个字母通常大写。
- 特点:
- 构造函数内部使用了
this
关键字。
- 生成对象时必须使用
new
命令。
2.new
命令的作用
- 作用执行构造函数,返回一个实例对象。
-
new
命令执行时,构造函数内部的this
指向新生成的实例对象。
- 忘记使用
new
命令,构造函数就变成了普通函数,this
代表全局对象。为了保证构造函数必须和new
命令一起用,一个方法是:构造函数内部使用严格模式use strict
,此时函数内部的this
不能指向全局对象,默认为undefined
,导致不加new
会报错。另一个方法是:构造函数内部判断是否使用了new
命令,如果没有使用,则直接返回一个实例对象。
function Fubar(foo, bar) {
if (!(this instanceof Fubar)) {
return new Fubar(foo, bar);
}
this._foo = foo;
this._bar = bar;
}
Fubar(1, 2)._foo // 1
(new Fubar(1, 2))._foo // 1
3. new
命令原理
- 创建一个空对象,作为将要返回的对象实例。
- 将这个空对象的原型,指向构造函数的prototype属性。
- 将这个空对象赋值给函数内部的this关键字。
- 开始执行构造函数内部的代码。
构造函数内部,this
指向新生成的空对象。
4. 关于构造函数的返回值:
- 如果没有
return
语句:返回this
对象。
- 有
return
语句且return
的是一个跟this
无关的对象:返回return
后的对象。
- 有
return
语句但return
的不是对象:返回this
对象。
如果对普通函数(内部没有this关键字的函数)使用new命令,则会返回一个空对象。