一提到j(luò)s構(gòu)造函數(shù)芥颈,可能很多人都會(huì)想到構(gòu)造函數(shù)內(nèi)部最好不要出現(xiàn)return甚至不要出現(xiàn)return的警告語(yǔ)放案。
那么,假如js構(gòu)造函數(shù)內(nèi)部出現(xiàn)了return止状,又會(huì)怎樣呢?
js構(gòu)造函數(shù)內(nèi)部沒(méi)有return時(shí):
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script type="text/javascript">
var People = function(name,age,sex){
this.name = name;
this.age = age;
this.sex =sex;
}
var p = new People(3);
</script>
</body>
</html>
輸出一下p看看結(jié)果攒霹,如圖所示:
注意紅圈圈怯疤,顯示p對(duì)象的類型是People。
如果一:
如果在構(gòu)造函數(shù)內(nèi)部添加上一個(gè)return關(guān)鍵字會(huì)怎樣呢催束?
var People = function(name,age,sex){
this.name = name;
this.age = age;
this.sex =sex;
return;
}
var p = new People(3);
還是輸出一下p,結(jié)果如圖所示:
是不是沒(méi)有任何變化集峦?!所以抠刺,僅僅添加一個(gè)return關(guān)鍵字是沒(méi)有影響的塔淤。
如果二:
那如果return一個(gè)數(shù)字呢?
var People = function(name,age,sex){
this.name = name;
this.age = age;
this.sex =sex;
return 1;
}
var p = new People(3);
同上矫付,還是輸出p查看結(jié)果凯沪,如圖所示:
是不是有沒(méi)有任何變化?买优!那就是了妨马,return數(shù)字類型的也沒(méi)有影響。
如果三:
return一個(gè)字符串
var People = function(name,age,sex){
this.name = name;
this.age = age;
this.sex =sex;
return "string";
}
var p = new People(3);
結(jié)果:
結(jié)果和沒(méi)有添加return的時(shí)候是一樣的杀赢,即return字符串是沒(méi)有影響的烘跺。
如果四:
添加return undefined;
var People = function(name,age,sex){
this.name = name;
this.age = age;
this.sex =sex;
return undefined;
}
var p = new People(3);
結(jié)果如圖所示:
依然是沒(méi)有變化的,即return undefined;也是沒(méi)有影響的脂崔。
如果五:
添加return null;
var People = function(name,age,sex){
this.name = name;
this.age = age;
this.sex =sex;
return null;
}
var p = new People(3);
結(jié)果如圖所示:
對(duì)比發(fā)現(xiàn)滤淳,return null;也是沒(méi)有影響的。
如果六:
添加return {};
var People = function(name,age,sex){
this.name = name;
this.age = age;
this.sex =sex;
return {};
}
var p = new People(3);
結(jié)果如圖所示:
等等砌左,怎么顯示p的類型是Object,難道不應(yīng)該是People嗎脖咐?
是的铺敌,你沒(méi)有說(shuō)錯(cuò),p的類型應(yīng)該是People;但這里確實(shí)顯示的是Object屁擅。說(shuō)明添加return {}偿凭;是有影響的,把構(gòu)造函數(shù)內(nèi)部的this給替換了派歌。
如果七:
添加return function(){};
var People = function(name,age,sex){
this.name = name;
this.age = age;
this.sex =sex;
return function(){};
}
var p = new People(3);
結(jié)果如下:
p的類型變成了function,顯然受影響了弯囊。
綜上所述,有沒(méi)有發(fā)現(xiàn)問(wèn)題胶果?
構(gòu)造函數(shù)內(nèi)部?jī)H僅添加return關(guān)鍵字匾嘱,或者return的是數(shù)字、字符串早抠、null霎烙、undefined等值類型的數(shù)據(jù)的時(shí)候,使用new關(guān)鍵字執(zhí)行后對(duì)新產(chǎn)生的對(duì)象是沒(méi)有影響的贝或。
但是吼过,一旦構(gòu)造函數(shù)內(nèi)部return的是對(duì)象、函數(shù)等引用類型的數(shù)據(jù)咪奖,使用new關(guān)鍵字執(zhí)行后新對(duì)象的具體類型就被改變了。顯然酱床,正常情況下這并不是我們想要的結(jié)果羊赵。
而且,即使return值類型的數(shù)據(jù)不會(huì)改變新對(duì)象的具體類型扇谣,但也并沒(méi)有什么實(shí)際意義昧捷。
所以呢,js構(gòu)造函數(shù)內(nèi)部還是不要出現(xiàn)return比較好啦罐寨!