欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

以函數(shù)中有無(wú)this來(lái)討論。沒(méi)有this時(shí)返回一個(gè)空的對(duì)象{},有this時(shí)返回一個(gè)非空對(duì)象。
定義一個(gè)沒(méi)有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í)行后沒(méi)有輸出任何屬性可以看出 c 是一個(gè)空的對(duì)象{}。

再看看有this的函數(shù),函數(shù)中有this實(shí)際上是在寫(xiě)一個(gè)類。但由于js的靈活性,造成了許多詭異的寫(xiě)法。
復(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,說(shuō)明返回值 c 是一個(gè)非空對(duì)象。這里的return "jack"壓根沒(méi)起作用。所以當(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屬性。說(shuō)明當(dāng)返回值是對(duì)象類型(對(duì)象,數(shù)組,函數(shù))時(shí),new不會(huì)用this去構(gòu)造對(duì)象,而直接返回組裝的對(duì)象。

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

相關(guān)文章

  • JavaScript迭代器的含義及用法

    JavaScript迭代器的含義及用法

    這篇文章主要介紹了JavaScript迭代器的含義及用法,迭代器就是為實(shí)現(xiàn)對(duì)不同集合進(jìn)行統(tǒng)一遍歷操作的一種機(jī)制,只要給需要遍歷的數(shù)據(jù)結(jié)構(gòu)部署Iterator接口,通過(guò)調(diào)用該接口,或者使用消耗該接口的API實(shí)現(xiàn)遍歷操作。,需要的朋友可以參考下
    2019-06-06
  • 詳解基于webpack&gettext的前端多語(yǔ)言方案

    詳解基于webpack&gettext的前端多語(yǔ)言方案

    這篇文章主要介紹了詳解基于webpack&gettext的前端多語(yǔ)言方案,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • Javascript中replace()小結(jié)

    Javascript中replace()小結(jié)

    在javascript中,replace方法是屬于String對(duì)象的,可用于替換字符串。今天我們就來(lái)詳細(xì)探討下一些replace()方法的使用
    2015-09-09
  • javascript表單驗(yàn)證以及正則表達(dá)式舉例詳解

    javascript表單驗(yàn)證以及正則表達(dá)式舉例詳解

    正則表達(dá)式描述了一種字符串匹配的模式,可以用來(lái)檢查一個(gè)串是否含有某種子串、將匹配的子串替換或者從某個(gè)串中取出符合某個(gè)條件的子串等,常用于表單驗(yàn)證等,下面這篇文章主要給大家介紹了關(guān)于javascript表單驗(yàn)證以及正則表達(dá)式的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • 圖片上傳判斷及預(yù)覽腳本的效果實(shí)例

    圖片上傳判斷及預(yù)覽腳本的效果實(shí)例

    這篇文章介紹了圖片上傳判斷及預(yù)覽腳本的效果實(shí)例,有需要的朋友可以參考一下
    2013-08-08
  • IE與FireFox中的childNodes區(qū)別

    IE與FireFox中的childNodes區(qū)別

    Javascript中,相信大家都試過(guò)用getElementsByTagName和childNodes來(lái)實(shí)現(xiàn)對(duì)節(jié)點(diǎn)的遍歷
    2011-10-10
  • 基于bootstrap實(shí)現(xiàn)廣告輪播帶圖片和文字效果

    基于bootstrap實(shí)現(xiàn)廣告輪播帶圖片和文字效果

    這篇文章主要介紹了基于bootstrap實(shí)現(xiàn)廣告輪播帶圖片和文字效果,效果非常棒,需要的朋友可以參考下
    2016-07-07
  • 用JavaScript做簡(jiǎn)易的購(gòu)物車(chē)的代碼示例

    用JavaScript做簡(jiǎn)易的購(gòu)物車(chē)的代碼示例

    這篇文章主要介紹了用JavaScript做簡(jiǎn)易的購(gòu)物車(chē)的代碼示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10
  • js/jquery解析json和數(shù)組格式的方法詳解

    js/jquery解析json和數(shù)組格式的方法詳解

    本篇文章主要是對(duì)js/jquery解析json和數(shù)組格式的方法進(jìn)行了詳細(xì)的介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助
    2014-01-01
  • 使用SpreadJS快速清除Excel中工作表保護(hù)密碼

    使用SpreadJS快速清除Excel中工作表保護(hù)密碼

    這篇文章主要為大家介紹了使用SpreadJS快速清除Excel中工作表保護(hù)密碼方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11

最新評(píng)論