1 function Fubar(foo, bar){ 2 'use strict'; 3 this._foo = foo; 4 this._bar = bar; 5 } 6 7 Fubar() 8 // TypeError: Cannot set property '_foo' of undefined
如果没有严格模式,构造函数中的this指向全局对象;
有严格模式时,this默认为undefined而不是指向全局对象;
如果此时直接调用构造函数,语句 this.-foo=foo; 相当于为“undefined”添加属性,所以会报错。
1 function Fubar(foo, bar) { 2 if (!(this instanceof Fubar)) { 3 return new Fubar(foo, bar); 4 } 5 6 this._foo = foo; 7 this._bar = bar; 8 } 9 10 Fubar(1, 2)._foo // 1 11 (new Fubar(1, 2))._foo // 1
目的:没有使用new来调用构造函数时,返回一个用new创建的构造函数实例。
过程:
this是否指向构造函数实例?
上述句子等同于:是否使用了new?
是,对true取反后为假,则不执行if内的语句;
否,对false取反后为真,执行if内语句。
结果是未使用new时,执行if内的语句。