javascript 具名函數(shù)的四種調(diào)用方式 推薦第2/3頁
更新時間:2009年07月05日 01:06:45 作者:
看四種方式執(zhí)行結(jié)果沒有區(qū)別。但如果函數(shù)有返回值的話,用new方式調(diào)用時可能會讓你有些失望。
以函數(shù)中有無this來討論。沒有this時返回一個空的對象{},有this時返回一個非空對象。
定義一個沒有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 是一個空的對象{}。
再看看有this的函數(shù),函數(shù)中有this實際上是在寫一個類。但由于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 是一個非空對象。這里的return "jack"壓根沒起作用。所以當函數(shù)返回值是內(nèi)置類型(基本類型)時,用new方式調(diào)用函數(shù)將會導(dǎo)致錯誤的結(jié)果 。
那么當函數(shù)返回值是一個對象,數(shù)組,函數(shù)呢?
復(fù)制代碼 代碼如下:
//不含this,返回值是一個對象
function fun() {
//組裝一個對象
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,返回值是一個對象
function fun() {
this.sex = "man";
//組裝一個對象
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屬性。說明當返回值是對象類型(對象,數(shù)組,函數(shù))時,new不會用this去構(gòu)造對象,而直接返回組裝的對象。
這種方式實際上是工廠方式,在應(yīng)用中更多的程序員把函數(shù)名首字母大寫,讓它看起來更像一個類。
相關(guān)文章
基于bootstrap實現(xiàn)廣告輪播帶圖片和文字效果
這篇文章主要介紹了基于bootstrap實現(xiàn)廣告輪播帶圖片和文字效果,效果非常棒,需要的朋友可以參考下2016-07-07js/jquery解析json和數(shù)組格式的方法詳解
本篇文章主要是對js/jquery解析json和數(shù)組格式的方法進行了詳細的介紹,需要的朋友可以過來參考下,希望對大家有所幫助2014-01-01