亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

胡說(shuō)-JavaScript函數(shù)類型

lsxiao / 1842人閱讀

摘要:跟這三種用法相對(duì)應(yīng)的有三種子類型,分別是對(duì)象的屬性變量包括參數(shù)和創(chuàng)建出來(lái)的類型實(shí)例對(duì)象的屬性。這三種子類是相互獨(dú)立的,而且也很容易區(qū)分。三種子類型不可以相互進(jìn)行調(diào)用之外,還有一種情況也非常重要那就是對(duì)象的屬性并沒(méi)有繼承的關(guān)系。

回到了自己的家鄉(xiāng),期待中有感覺(jué)到了很多的陌生,一個(gè)有“故事”的環(huán)境中,你我是否“孤獨(dú)”!
函數(shù)的類型

在我看來(lái)function共有三種類型,作為對(duì)象使用,處理業(yè)務(wù)以及穿件object的實(shí)例對(duì)象。跟這三種用法相對(duì)應(yīng)的有三種子類型,分別是對(duì)象的屬性、變量(包括參數(shù))和創(chuàng)建出來(lái)的object類型實(shí)例對(duì)象的屬性。這三種子類是相互獨(dú)立的,而且也很容易區(qū)分。但是,我們剛剛接觸的時(shí)候很容易混淆。

1.function 作為對(duì)象來(lái)使用

這種情況下,function對(duì)象的子類型就是對(duì)象自己的屬性,這時(shí)通過(guò)操作符“.”(或者方括號(hào)操作符)使用,示例如下:

function book(){}
book.price=999;
book["getPrice"]=function(){
    return this.price;
}
console.log(book.getPrice()); //輸出結(jié)果:999
我很少碰到function來(lái)作為object類型的對(duì)象來(lái)使用。
2.funciton 用于處理業(yè)務(wù)

這種情況下,function的子類型就是自己定義的局部變量(包括參數(shù)),這時(shí)的變量實(shí)在方法被調(diào)用時(shí)通過(guò)變量作用域鏈來(lái)管理的。
關(guān)于變量我之前的文檔中有涉及到,這里就不過(guò)多的說(shuō)明了。

3.function 用于創(chuàng)建對(duì)象

這種情況下,對(duì)應(yīng)的子類型是使用function創(chuàng)建實(shí)例對(duì)象的屬性(很常用),主要包括在function中通過(guò)this添加屬性,以及創(chuàng)建完成之后實(shí)例對(duì)象自己添加的屬性。另外,還可以調(diào)用function的prototype屬性對(duì)象所包含的屬性,示例如下:

function Car(color,displacement){
    this.color = color;
    this.displacement = displacement;
}
Car.prototype.logMessage = function(){
  console.log(this.color+","+this.displacement);  
};
var car = new Car("yellow","2.4T");//看看是不是類似構(gòu)造函數(shù)?哈哈

這個(gè)例子中創(chuàng)建的car對(duì)象就包含有color和displacement兩個(gè)屬性,而且還可以調(diào)用Car.prototype的logMessage方法。當(dāng)然,創(chuàng)建完之后還可以使用點(diǎn)操作符給創(chuàng)建的car對(duì)象添加或者修改屬性,也可以使用delete刪除其中的屬性,示例如下:

function Car(color,displacement){
    this.color = color;
    this.displacement = displacement;
}
//所有創(chuàng)建出來(lái)的car都有該方法
Car.prototype.logMessage = function(){
  console.log(this.color+","+this.displacement);  
};
var car = new Car("yellow","2.4T");//看看是不是類似構(gòu)造函數(shù)?哈哈
//給car對(duì)象添加屬性
car.logColor = function(){
  console.log(this.color);  
};
//完成調(diào)用測(cè)試
car.logColor();//輸出結(jié)果: yellow
car.color = "red";
car.logColor();//輸出結(jié)果:red
delete car.color;//刪除屬性
car.logColor();//輸出結(jié)果:undefined
代碼分析:

在創(chuàng)建完car對(duì)象之后,又給它添加了logColor的方法,可以打印car的color屬性。添加完logColor方法后直接調(diào)用就可以打印出car原來(lái)的color屬性值(yellow)。然后,將其修改為red,在打印出了red。最后,使用delete刪除car的color的屬性,這時(shí)在調(diào)用logColor方法會(huì)打印出undefined

其實(shí)跟我的注釋說(shuō)明一致?。?!

三種子類型的關(guān)系

function的三種子類型是相互獨(dú)立的,他們只能在自己所對(duì)應(yīng)的環(huán)境中使用而不能相互調(diào)用,示例如下:

function log(msg){//第二種業(yè)務(wù)處理
    console.log(msg);
}
function Bird(){
    var name = "kitty";
    this.type = "pigeon";
    this.getName = function(){
        return this.name;//創(chuàng)建的對(duì)象沒(méi)有name屬性
    }
}
Bird.color = "white";//第一種object類型的對(duì)象
Bird.getType = function(){//第一種object類型的對(duì)象
    return this.type;
};
Bird.prototype.getColor = function(){//第三種創(chuàng)建對(duì)象
    return this.color;
}
var bird = new Bird();
log(bird.getColor());// undefined
log(bird.getName()); // undefined
log(bird.getType()); // undefined
Bird 作為對(duì)象時(shí)包含 color 和 getType 兩個(gè)屬性,作為處理業(yè)務(wù)的函數(shù)是包含一個(gè)名為name的局部變量,創(chuàng)建的實(shí)例對(duì)象bird具有type和getName兩個(gè)屬性,而且還可以調(diào)用Bird.prototype的getColor屬性,getColor也可以看作bird的屬性。
用 法 子 類 型
對(duì)象(Bird) color 、getType
處理業(yè)務(wù)(Bird方法) name
創(chuàng)建實(shí)例對(duì)象(bird) type、getName、(getColor)

每種用法中所定義的方法只能調(diào)用相對(duì)應(yīng)所對(duì)應(yīng)的屬性,而不能交叉調(diào)用,從對(duì)應(yīng)關(guān)系中可以看出,getName、getColor和getType三個(gè)方法中無(wú)法獲取到值,大家再仔細(xì)分析一下!

另外,getName和getColor是bird的屬性方法,getType是Bird的屬性方法,如果用Bird對(duì)象調(diào)用getName或getColor方法或者使用bird對(duì)象調(diào)用getType方法都會(huì)拋出找不到的錯(cuò)誤。

三種子類型不可以相互進(jìn)行調(diào)用之外,還有一種情況也非常重要:那就是對(duì)象的屬性并沒(méi)有繼承的關(guān)系。

function obj(){}
obj.v=1;
obj.func = {
    logV : function(){
        console.log(this.v);
    }
}
obj.func.logV();
代碼分析:

這個(gè)例子中的obj是作為對(duì)象使用的,obj是有一個(gè)屬性v和一個(gè)對(duì)象屬性func,func對(duì)象中又有一個(gè)logV方法,logV方法用于打印對(duì)象的v屬性。這里需要特別注意:

logV方法打印的是func對(duì)象的v屬性,但是func對(duì)象中并沒(méi)有v屬性,所以最后結(jié)果是undefined。

這個(gè)例子中,雖然obj對(duì)象中包含v屬性,但是由于屬性不可以繼承,所以obj的func屬性對(duì)象中的方法不可以使用obj中的屬性v.

請(qǐng)大家一定要記住,并且不要和prototype的繼承以及變量作用域鏈相混淆

關(guān)聯(lián)三種子類型

三種子類型本來(lái)是相互獨(dú)立、各有各的使用環(huán)境的,但是,有一些情況下需要操作不屬于自己所對(duì)應(yīng)環(huán)境的子類型,這時(shí)就需要使用一些技巧來(lái)實(shí)現(xiàn)了。

約定如下

function 作為對(duì)象使用時(shí)記作 O(Object)

作為函數(shù)使用時(shí)記作 F(Function)

創(chuàng)建出來(lái)的對(duì)象實(shí)例記作 I(Instance)

op(object property)

v(variable)

ip(instance property)

op v ip
O 直接調(diào)用 在函數(shù)中關(guān)聯(lián)到O的屬性 不可調(diào)用
F 使用O調(diào)用 直接調(diào)用 不可調(diào)用
I 使用O調(diào)用 在函數(shù)中關(guān)聯(lián)到I的屬性 直接調(diào)用

縱向表頭表示function的不同用法

橫向表頭表示三種類型,表格的主體表示在function相應(yīng)用法中調(diào)用各種子類的方法。

因?yàn)閒unction創(chuàng)建的實(shí)例對(duì)象在創(chuàng)建之前還不存在,所以function作為方法(F)和作為對(duì)象(O)使用時(shí)無(wú)法調(diào)用function創(chuàng)建的實(shí)例對(duì)象的屬性(ip)。調(diào)用參數(shù)可以在函數(shù)中將變量關(guān)聯(lián)到相應(yīng)的屬性,調(diào)用function作為對(duì)象(O)時(shí)的屬性可以直接使用 function 對(duì)象來(lái)調(diào)用

function log(msg){
    console.log(msg);
}
function Bird(){
    //私有屬性
    var name = "kitty";
    var type = "pigeon";
    //將局部變量name關(guān)聯(lián)到新創(chuàng)建的對(duì)象的getName,setName屬性方法
    //閉包可以使用局部變量
    //公有屬性
    this.getName = function(){
        return name;
    }
    this.setName = function(n){
        name = n;
    }
    //將局部變量type關(guān)聯(lián)到Bird對(duì)象getType屬性方法
    //靜態(tài)屬性
    Bird.type = function(){
        return type;
    }
    //在業(yè)務(wù)處理中調(diào)用Bird對(duì)象的color屬性
    log(Bird.color);//輸出結(jié)果: white,F調(diào)用op
    
}
Bird.color = "white";// 代表 O
//在創(chuàng)建出的實(shí)例對(duì)象中調(diào)用Bird對(duì)象的color屬性
Bird.prototype.getColor = function(){//I
    return Bird.color;//OP
}
var bird = new Bird(); // 創(chuàng)建實(shí)例 I
log(bird.getColor()); // 輸出結(jié)果:white , I 調(diào)用 op
log(bird.getName());// 輸出結(jié)果:kitty , I 調(diào)用 v 局部變量
log(Bird.getType());// 輸出結(jié)果:pigeon , O 調(diào)用 v 局部變量
bird.setName("petter");  // I 調(diào)用 v
log(bird.getName());// 輸出結(jié)果:petter , I 調(diào)用 v 局部變量
好好分析上述的代碼,非常經(jīng)典的,了解三種子類型的不同環(huán)境用法中交叉調(diào)用的方法
附錄:“公有屬性” “私有屬性” 和 “靜態(tài)屬性”

上面的示例中我們涉及到了公有屬性、私有屬性和靜態(tài)屬性的說(shuō)明,由于JS并不是基本類而是基于對(duì)象的語(yǔ)言,因此JS本身并沒(méi)有這些概念。

公有屬性:一般指使用function對(duì)象創(chuàng)建出object實(shí)例對(duì)象所擁有的屬性。

私有屬性:一般指function的內(nèi)部變量

靜態(tài)屬性:一般指function對(duì)象自己的屬性

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/108883.html

相關(guān)文章

  • 「前端開(kāi)發(fā)者」如何把握住「微信小程序」這波紅利?

    摘要:我將上述內(nèi)容進(jìn)行簡(jiǎn)單的整理,來(lái)回答標(biāo)題的提問(wèn)前端開(kāi)發(fā)者如何把握住微信小程序這波紅利迅速掌握微信小程序相關(guān)技術(shù)。 由于前兩周一直在老家處理重要事情,雖然朋友圈被「微信小程序」刷爆了,但并沒(méi)有時(shí)間深入了解。 昨天回廣州之后,第一件事情就是把「微信小程序」相關(guān)的文章、開(kāi)發(fā)文檔、設(shè)計(jì)規(guī)范全部看了一遍,基本上明白了「微信小程序」是怎么回事,我關(guān)注的公眾號(hào)都很看好「微信小程序」的前景。 作為一個(gè)「...

    wendux 評(píng)論0 收藏0
  • 開(kāi)開(kāi)心心做幾道JavaScript機(jī)試題 - 01

    摘要:碰到這種面試官,你只有是個(gè)題霸,再加上眼緣夠才能順利入圍。只要按照我題目的思路,甚至打出來(lái)測(cè)試用例看看,就能實(shí)現(xiàn)這個(gè)題目了。答案根據(jù)的,對(duì)答案做出修正。另我的答案絕不敢稱最佳,隨時(shí)歡迎優(yōu)化修正。但了解總歸是好的。 我們?cè)陂L(zhǎng)期的面試過(guò)程中,經(jīng)歷了種種苦不堪言,不訴苦感覺(jué)不過(guò)癮(我盡量控制),然后主要聊聊常見(jiàn)JavaScript面試題的解法,以及面試注意事項(xiàng) 憶苦 面試第一苦,面試官的土 ...

    liujs 評(píng)論0 收藏0
  • IDE已破解,不用預(yù)熱,馬上進(jìn)入「微信小程序」開(kāi)發(fā)

    摘要:在眾多消息里,啃先生排除掉預(yù)測(cè)類的信息,汲取了對(duì)于技術(shù)從業(yè)者有用的信息,整理出此文章,說(shuō)說(shuō)微信小程序開(kāi)發(fā)的設(shè)計(jì)理念和入門(mén)。以上至少四個(gè)文件,即可生成一個(gè)最簡(jiǎn)單的微信小程序。 昨晚臨睡覺(jué)前,還在想應(yīng)該給xx打個(gè)電話,問(wèn)問(wèn)微信應(yīng)用號(hào)應(yīng)該有原生 UI 吧,要不然跟直接跑 HTML 5 有什么區(qū)別? 而今天一大早我便一本正經(jīng)胡說(shuō)八道猜想,微信小程序不會(huì)有 JS IDE ,一個(gè)小時(shí)之后,發(fā)現(xiàn)被打...

    ghnor 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<