众所周知,构造函数一般用new去调用,比如:
function Person(name,age){ this.name = name; this.age = age; } var xiaoming = new Person('xiaoming',21);
因为使用new 调用构造函数,所有构造函数内部使用的this会指向新创建的对象的实例,但是,如果没有用new去调用构造函数,情况会怎么样???可能一堆代码里面就有那么几段手误的。
比如:
var xiaoming = Person('xiaoming', 21);
此时情况怎么样,没错,因为this对象是运行时候绑定的,此时的this直接指向了window,那么window就有了window.name 和window.age,这是很可怕的事情,会导致意想不到的错误。
为了安全起见,创建一个作用域安全的构造函数式很有必要的。
function Person(name,age){ if(this instanceof Person){ this.name = name; this.age = age; }else{ return new Person(name,age); } }
主要是加入了检查并确保this是Person实例的判断,这个,即使不适用new去调用构造函数,也能返构造函数的实例。