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

JavaScript 高級(jí)篇之閉包、模擬類,繼承(五)

 更新時(shí)間:2012年04月07日 02:13:20   作者:  
本篇主要分享我對(duì)閉包的理解及使用閉包完成私有屬性、模擬類、繼承等,結(jié)合大量例子,希望大家能快速掌握!首先讓我們先從一些基本的術(shù)語(yǔ)開(kāi)始吧
一、javascript中的閉包
1、我們一起先來(lái)理解什么是函數(shù)的作用域。

2、調(diào)用的對(duì)象

結(jié)合例子:

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

function display(something)
{
function executeDisplay1()
{
document.write("我在幫老板打印:"+something+"<br />");//引用外部函數(shù)的something參數(shù)
}
executeDisplay1();//函數(shù)display引用了內(nèi)部函數(shù)
}
display("sorry");//執(zhí)行完畢后被垃圾收集器回收

3、閉包的形成

例一、

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

var obj = {};//全局的對(duì)象
function buyHouse(price,area)
{
return function(){return "你要付的房款:"+price*area;}; //把內(nèi)部函數(shù)作為返回值
}
obj.people = buyHouse(12000,80); //把內(nèi)部函數(shù)的引用保存到obj對(duì)象的people屬性中。
//這樣就形成了閉包,簡(jiǎn)單的表達(dá):把嵌套函數(shù)的引用保存到全局作用域中,不管是使用它返回的值,還是把它存在對(duì)象的屬性中都可以。
document.write(obj.people()+"<br />");

例二、
復(fù)制代碼 代碼如下:

function add()
{
var number = 0;
return function(){return ++number;};//
}
var num = add();//現(xiàn)在是不是有4引用了吧,第一個(gè)全局創(chuàng)建:訪問(wèn)函數(shù),第二個(gè)有外部函數(shù)(這里指的是Add()引用了匿名函數(shù))
//第三個(gè)是匿名函數(shù)(就是return function.....引用了Add的局部變量),第四個(gè)就全局對(duì)象(var num)了。
//全局對(duì)象的每次調(diào)用的對(duì)象依然保存在函數(shù)體中,所以局部變量的值都會(huì)被維持。
document.write(num());

//等效的方法
num2 = (function(){var number = 0;return function(){return ++number;}})();//匿名函數(shù),直接賦給了全局對(duì)象
document.write(num2());

例三、實(shí)現(xiàn)私有屬性
復(fù)制代碼 代碼如下:

//使用閉包實(shí)現(xiàn)私有屬性
function createProperty(o,propertyname,check)
{
var value;
o["get"+propertyname] = function(){return value;};//將一個(gè)匿名的函數(shù)體返回給對(duì)象的屬性
o["set"+propertyname] = function(v){if(check && !check)//檢查參數(shù)的合法性throw("參數(shù)不對(duì)!");
else value = v; };//將一個(gè)匿名的函數(shù)體返回給對(duì)象的屬性
}
var o = {};
createProperty(o,"Age",function(x){return typeof x == "number";});//后面跟了一個(gè)匿名的函數(shù),執(zhí)行驗(yàn)證的工作,如果不是數(shù)字就返回false
o.setAge(22);//使用對(duì)象的屬性
document.write(o.getAge());

//其實(shí)上面還是將函數(shù)保存到了全局對(duì)象的屬性中。

二、javascript中的類
同樣也從一些基本的術(shù)語(yǔ)開(kāi)始吧!
1、原型(prototype)

其實(shí)一個(gè)對(duì)象的原型就是構(gòu)造函數(shù)的prototype的值,所有的函數(shù)都一個(gè)prototype屬性,當(dāng)函數(shù)被創(chuàng)建是就被自動(dòng)創(chuàng)建和初始化,初始化它的值是一個(gè)對(duì)象,這個(gè)對(duì)象自帶一個(gè)屬性就是constructor,它指回到和原型相關(guān)聯(lián)的那個(gè)構(gòu)造函數(shù)。
復(fù)制代碼 代碼如下:

function PeopleHope(money,house)
{
this.money = money;
this.house = house;
}
PeopleHope.prototype.hope = function(){document.write("我想擁有鈔票,房子");};//這就是原型,都會(huì)被構(gòu)造函數(shù)初始化成對(duì)象的屬性。
for(var p in PeopleHope.prototype)
{
document.write("原型出來(lái)了吧! \t " + p + "<br />");//輸出:原型出來(lái)了吧! hope
}

2、模擬類

其實(shí)Javascript中的“類”就是函數(shù)而已。直接上代碼吧!
復(fù)制代碼 代碼如下:

function PeopleHope(money,house)
{
this.money = money;
this.house = house;
PeopleHope.VERSION = 0.1//類的屬性
PeopleHope.createLive = function(){document.write("在黨的領(lǐng)導(dǎo)下,我們的生活很好!");}//類方法 必須是類直接引用
}

3、類的繼承
復(fù)制代碼 代碼如下:

function CreateClass(name,version)
{
this.name = name; //初始化對(duì)象屬性
this.version= version;
CreateClass.AUTHOR = "Frank";//類屬性
CreateClass.SellHouse = function(){document.write("我們是房地產(chǎn)龍頭企業(yè)萬(wàn)科");};//類的方法
CreateClass.prototype.Company = "vanke";
CreateClass.prototype.HousePrice = function(){document.write("大梅沙山頂豪宅賣(mài)5千萬(wàn)一套,暢銷價(jià)!");};
//原型,其實(shí)到這里大家可能就會(huì)問(wèn)了,這個(gè)原型和類方法等有什么區(qū)別呢?
//其實(shí)就是:比如 var o = new CreateClass("中糧地產(chǎn)","一期");CreateClass函數(shù)里面的this就是o了,連起來(lái)就是
//o.name = "中糧地產(chǎn)";o.version = “一期”;吧!
//至于原型其實(shí)在干的事你可以把它理解成一個(gè)”叛徒“在你創(chuàng)建o這個(gè)對(duì)象的時(shí)候,由 原型告訴構(gòu)造函數(shù)一起帶走初始化
//成了對(duì)象o的屬性。
}
function House(name,version,city)
{
CreateClass.apply(this,[name,version]);//繼承構(gòu)造函數(shù)
this.city = city;
House.prototype.housename = "半島花園";
}
House.prototype = new CreateClass("中糧地產(chǎn)","二期");//通過(guò)new獲取CeateClass屬性,包括原型對(duì)象
//打印函數(shù)的prototype屬性
function displayPrototype(c)
{
for(var x in c.prototype)
{
document.write(x+"<br />");
}
}
displayPrototype(House);//輸出:HousePrice Company name version
//刪除不是原型的對(duì)象
delete House.prototype.name;//刪除
delete House.prototype.version;//刪除
displayPrototype(House);//輸出:HousePrice Company
var customers = new House("半島花園","三期","西拔牙");
for(var t in customers)
{
if(typeof customers[t] == "function")//判斷是不是函數(shù)
{
customers[t]();//執(zhí)行
continue;//返回本次,進(jìn)行下一次循環(huán)
}
document.write(t +":\t" + customers[t]+ "<br />");
// 輸出housename: 半島花園 Company: vanke 大梅沙山頂豪宅賣(mài)5千萬(wàn)一套,暢銷價(jià)!name: 半島花園version: 三期 city: 西拔牙
//繼承就實(shí)現(xiàn)了。通過(guò)原型。

小結(jié):本篇就和大家分享到這里吧,本來(lái)還有命名空間要分享,由于學(xué)習(xí)時(shí)間安排的關(guān)系,Javascript語(yǔ)法就給大家分享到這里吧!

下次我將分享我對(duì)javascript客服端的編程及Jquery等高級(jí)應(yīng)用。

相關(guān)文章

  • 關(guān)于JavaScript命名空間的一些心得

    關(guān)于JavaScript命名空間的一些心得

    這篇文章主要介紹了關(guān)于JavaScript命名空間的一些心得,分別給出了頂級(jí)、多級(jí)命名空間的例子,需要的朋友可以參考下
    2014-06-06
  • js處理跨域的方案之jsonp用法詳解

    js處理跨域的方案之jsonp用法詳解

    這篇文章主要介紹了js處理跨域的方案之jsonp用法的相關(guān)資料,文中分享了前端調(diào)用后端接口的三種方式:Ajax、fetch、axios,并詳細(xì)解釋了同源策略和跨域的概念,需要的朋友可以參考下
    2024-11-11
  • 微信小程序異步處理詳解

    微信小程序異步處理詳解

    這篇文章主要為大家詳細(xì)介紹了微信小程序異步處理的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • js輪播圖透明度切換(帶上下頁(yè)和底部圓點(diǎn)切換)

    js輪播圖透明度切換(帶上下頁(yè)和底部圓點(diǎn)切換)

    本篇文章主要介紹了js輪播圖透明度切換(帶上下頁(yè)和底部圓點(diǎn)切換)的實(shí)例。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-04-04
  • uniapp中使用vuex的過(guò)程(解決uniapp無(wú)法在data和template中獲取vuex數(shù)據(jù)問(wèn)題)

    uniapp中使用vuex的過(guò)程(解決uniapp無(wú)法在data和template中獲取vuex數(shù)據(jù)問(wèn)題)

    這篇文章主要介紹了uniapp中使用vuex(解決uniapp無(wú)法在data和template中獲取vuex數(shù)據(jù)問(wèn)題),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • JavaScript構(gòu)造函數(shù)舉例詳解

    JavaScript構(gòu)造函數(shù)舉例詳解

    Javascript構(gòu)造函數(shù)是非常強(qiáng)大的,它可能也是Javascript能被充分利用的特點(diǎn)之一,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),這篇文章主要給大家介紹了關(guān)于JavaScript構(gòu)造函數(shù)的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • JavaScript canvas實(shí)現(xiàn)九宮格切圖效果

    JavaScript canvas實(shí)現(xiàn)九宮格切圖效果

    這篇文章主要為大家詳細(xì)介紹了JavaScript canvas實(shí)現(xiàn)九宮格切圖效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 微信JS接口匯總及使用詳解

    微信JS接口匯總及使用詳解

    這篇文章主要介紹了微信JS接口匯總及使用詳解,十分的全面、詳盡,包含分享到朋友圈,分享給朋友,分享到QQ,拍照或從手機(jī)相冊(cè)中選圖,識(shí)別音頻并返回識(shí)別結(jié)果,使用微信內(nèi)置地圖查看位置等接口,有需要的小伙伴參考下吧
    2015-01-01
  • bootstrap 通過(guò)加減按鈕實(shí)現(xiàn)輸入框組功能

    bootstrap 通過(guò)加減按鈕實(shí)現(xiàn)輸入框組功能

    這篇文章主要介紹了bootstrap 輸入框組 通過(guò)加減按鈕來(lái)增加刪除內(nèi)嵌輸入框組,當(dāng)我點(diǎn)擊 + 按鈕時(shí),會(huì)添加一行輸入框組;當(dāng)點(diǎn)擊 - 按鈕時(shí),會(huì)刪除這一行輸入框組。具體實(shí)現(xiàn)代碼大家參考下本文
    2017-11-11
  • JavaScript動(dòng)畫(huà)實(shí)例之粒子文本的實(shí)現(xiàn)方法詳解

    JavaScript動(dòng)畫(huà)實(shí)例之粒子文本的實(shí)現(xiàn)方法詳解

    這篇文章主要介紹了JavaScript動(dòng)畫(huà)實(shí)例之粒子文本的實(shí)現(xiàn)方法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07

最新評(píng)論

久治县| 宁晋县| 临桂县| 山西省| 石狮市| 武鸣县| 邓州市| 连山| 昆山市| 晋宁县| 墨竹工卡县| 克东县| 梅河口市| 惠东县| 黄浦区| 长武县| 开封市| 香河县| 黔东| 红桥区| 原阳县| 马边| 友谊县| 宣化县| 舞钢市| 南昌县| 达州市| 卓尼县| 屯留县| 广汉市| 平山县| 抚顺市| 托克逊县| 翁牛特旗| 大姚县| 西宁市| 塔河县| 孙吴县| 奎屯市| 合山市| 荥经县|