国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

lsxiao / 1784人閱讀

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

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

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

1.function 作為對象來使用

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

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

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

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

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

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ù)?哈哈

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

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

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

其實跟我的注釋說明一致!!!

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

function的三種子類型是相互獨立的,他們只能在自己所對應(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)建的對象沒有name屬性
    }
}
Bird.color = "white";//第一種object類型的對象
Bird.getType = function(){//第一種object類型的對象
    return this.type;
};
Bird.prototype.getColor = function(){//第三種創(chuàng)建對象
    return this.color;
}
var bird = new Bird();
log(bird.getColor());// undefined
log(bird.getName()); // undefined
log(bird.getType()); // undefined
Bird 作為對象時包含 color 和 getType 兩個屬性,作為處理業(yè)務(wù)的函數(shù)是包含一個名為name的局部變量,創(chuàng)建的實例對象bird具有type和getName兩個屬性,而且還可以調(diào)用Bird.prototype的getColor屬性,getColor也可以看作bird的屬性。
用 法 子 類 型
對象(Bird) color 、getType
處理業(yè)務(wù)(Bird方法) name
創(chuàng)建實例對象(bird) type、getName、(getColor)

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

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

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

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

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

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

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

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

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

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

約定如下

function 作為對象使用時記作 O(Object)

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

創(chuàng)建出來的對象實例記作 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)用各種子類的方法。

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

function log(msg){
    console.log(msg);
}
function Bird(){
    //私有屬性
    var name = "kitty";
    var type = "pigeon";
    //將局部變量name關(guān)聯(lián)到新創(chuàng)建的對象的getName,setName屬性方法
    //閉包可以使用局部變量
    //公有屬性
    this.getName = function(){
        return name;
    }
    this.setName = function(n){
        name = n;
    }
    //將局部變量type關(guān)聯(lián)到Bird對象getType屬性方法
    //靜態(tài)屬性
    Bird.type = function(){
        return type;
    }
    //在業(yè)務(wù)處理中調(diào)用Bird對象的color屬性
    log(Bird.color);//輸出結(jié)果: white,F調(diào)用op
    
}
Bird.color = "white";// 代表 O
//在創(chuàng)建出的實例對象中調(diào)用Bird對象的color屬性
Bird.prototype.getColor = function(){//I
    return Bird.color;//OP
}
var bird = new Bird(); // 創(chuàng)建實例 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)屬性的說明,由于JS并不是基本類而是基于對象的語言,因此JS本身并沒有這些概念。

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

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

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

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

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/108883.html

相關(guān)文章

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

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

    wendux 評論0 收藏0
  • 開開心心做幾道JavaScript機試題 - 01

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

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

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

    ghnor 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<