作用域安全的构造函数

众所周知,构造函数一般用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去调用构造函数,也能返构造函数的实例。  

 

posted @ 2017-06-24 18:30  leaf+  阅读(233)  评论(0编辑  收藏  举报