JS里的普通函數(shù)和構(gòu)造函數(shù)在聲明時(shí)是沒有差別的侥袜。
而是通過(guò)new操作符來(lái)判斷是否需要?jiǎng)?chuàng)建一個(gè)新的對(duì)象舱权。
如果不使用new操作符來(lái)使用募胃,是不會(huì)像其他后端代碼一樣會(huì)不能編譯的旗唁。
在JS中,new操作符有一個(gè)作用就是將this的指向從調(diào)用對(duì)象轉(zhuǎn)到被構(gòu)造的對(duì)象上痹束。
就像如下的代碼:
function Person(name,age){
this.name = name;
this.age = age;
}
var p1 = new Person("Koz",80); //創(chuàng)建一個(gè)person對(duì)象检疫。
var p2 = Person("Dave",80) //沒有new,this的指向會(huì)是window祷嘶。
在這里不僅是沒有成功創(chuàng)建一個(gè)你需要的對(duì)象屎媳,而且由于window本身有一些屬性,被更改后很可能造成一些其他功能的錯(cuò)誤论巍。
正確的做法應(yīng)該在構(gòu)造函數(shù)中添加一個(gè)判斷烛谊,如果this不指向一個(gè)person對(duì)象,那么則返回一個(gè)函數(shù)來(lái)創(chuàng)建正確的對(duì)象嘉汰。
function Person(name,age){
if(this instanceof Person){
this.name = name;
this.age = age;
} else {
return new Person(name,age);
}
}