JS的坑之构造函数

JS里的普通函数和构造函数在声明时是没有差别的。
而是通过new操作符来判断是否需要创建一个新的对象。
如果不使用new操作符来使用,是不会像其他后端代码一样会不能编译的。
在JS中,new操作符有一个作用就是将this的指向从调用对象转到被构造的对象上。
就像如下的代码:

function Person(name,age){
    this.name = name;
    this.age = age;
}
var p1 = new Person("Koz",80); //创建一个person对象。
var p2 = Person("Dave",80) //没有new,this的指向会是window。

在这里不仅是没有成功创建一个你需要的对象,而且由于window本身有一些属性,被更改后很可能造成一些其他功能的错误。
正确的做法应该在构造函数中添加一个判断,如果this不指向一个person对象,那么则返回一个函数来创建正确的对象。

function Person(name,age){
    if(this instanceof Person){
        this.name = name;
        this.age = age;
    } else {
        return new Person(name,age);
    }   
}

你可能感兴趣的:(JS的坑之构造函数)