最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

javascript 具名函數(shù)的四種調(diào)用方式 推薦第2/3頁

 更新時(shí)間:2009年07月05日 01:06:45   作者:  
看四種方式執(zhí)行結(jié)果沒有區(qū)別。但如果函數(shù)有返回值的話,用new方式調(diào)用時(shí)可能會(huì)讓你有些失望。

以函數(shù)中有無this來討論。沒有this時(shí)返回一個(gè)空的對(duì)象{},有this時(shí)返回一個(gè)非空對(duì)象。
定義一個(gè)沒有this的函數(shù)
復(fù)制代碼 代碼如下:

//返回值是基本類型
function fun() {
return "jack";
}

var c = new fun();
for (var atr in c) {
alert(atr);
}
alert(c);//[object Object]

返回值c不是"jack", 從for in執(zhí)行后沒有輸出任何屬性可以看出 c 是一個(gè)空的對(duì)象{}。

再看看有this的函數(shù),函數(shù)中有this實(shí)際上是在寫一個(gè)類。但由于js的靈活性,造成了許多詭異的寫法。
復(fù)制代碼 代碼如下:

//返回值是基本類型
function fun() {
this.name = "tom";
return "jack";
}

var c = new fun();
for (var atr in c) {
alert(atr);//name
}
alert(c.name);//tom

返回值也不是"jack",for in輸出了name屬性,最后一句輸出了tom,說明返回值 c 是一個(gè)非空對(duì)象。這里的return "jack"壓根沒起作用。所以當(dāng)函數(shù)返回值是內(nèi)置類型(基本類型)時(shí),用new方式調(diào)用函數(shù)將會(huì)導(dǎo)致錯(cuò)誤的結(jié)果 。

那么當(dāng)函數(shù)返回值是一個(gè)對(duì)象,數(shù)組,函數(shù)呢?
復(fù)制代碼 代碼如下:

//不含this,返回值是一個(gè)對(duì)象
function fun() {
//組裝一個(gè)對(duì)象
var obj = {};
obj.name = 'andy';
obj.age = 20;
obj.msg = function(){}

return obj;
}

var c = new fun();
for (var atr in c) {
alert(atr);//name,age,msg
}
alert(c.name);//andy

復(fù)制代碼 代碼如下:

//含this,返回值是一個(gè)對(duì)象
function fun() {
this.sex = "man";
//組裝一個(gè)對(duì)象
var obj = {};
obj.name = 'andy';
obj.age = 20;
obj.msg = function(){}

return obj;
}

var c = new fun();
for (var atr in c) {
alert(atr);//name,age,msg
}
alert(c.name);//andy

兩段的輸出結(jié)果是一樣的,c都含有name,age,msg屬性而不含sex屬性。說明當(dāng)返回值是對(duì)象類型(對(duì)象,數(shù)組,函數(shù))時(shí),new不會(huì)用this去構(gòu)造對(duì)象,而直接返回組裝的對(duì)象。

這種方式實(shí)際上是工廠方式,在應(yīng)用中更多的程序員把函數(shù)名首字母大寫,讓它看起來更像一個(gè)類。

相關(guān)文章

最新評(píng)論

民县| 华安县| 平昌县| 泌阳县| 含山县| 九寨沟县| 玉门市| 尉犁县| 日喀则市| 大冶市| 顺昌县| 阜平县| 普宁市| 密云县| 墨脱县| 浮山县| 政和县| 江口县| 左云县| 那坡县| 凤翔县| 湖口县| 滨州市| 鹤山市| 伊吾县| 湖州市| 奇台县| 吉隆县| 会宁县| 历史| 肥乡县| 彩票| 南华县| 蒙自县| 广昌县| 石嘴山市| 张掖市| 盐津县| 琼结县| 利辛县| 奇台县|