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

javascript prototype,executing,context,closure

 更新時(shí)間:2008年12月24日 02:29:17   作者:  
JavaScript是一種靈活的腳本語(yǔ)言。與Java、C++等需要編譯執(zhí)行的程序設(shè)計(jì)語(yǔ)言有很大不同,在使用的過(guò)程中,會(huì)暴露出一些問(wèn)題。
要學(xué)好JavaScript,有幾個(gè)基本概念必須搞清楚:prototype,executing,context,closure。
Prototype

在JavaScript語(yǔ)言中,通常使用Prototype來(lái)實(shí)現(xiàn)OO。在這里,我們不對(duì)JavaScript的OO實(shí)現(xiàn)進(jìn)行過(guò)多的探討,著重來(lái)看一下JS中對(duì)象的內(nèi)存模型。在開(kāi)始之前,需要先明確以下幾點(diǎn):
1. JS中,存在以下幾種數(shù)據(jù)類型:string,number,boolean,object,function(注意:首字母均為小寫)。
2 “Object”, “String”, “Date”等內(nèi)置數(shù)據(jù)類型,在JS中實(shí)際上是函數(shù)名稱(使用"alert(typeof Object)"可以驗(yàn)證,輸出為"function")。我們通常指的類型為"Date"的數(shù)據(jù)類型,實(shí)際上是通過(guò)"new Date"所產(chǎn)生的對(duì)象。
3. 在JavaScript中,對(duì)象都是associative array (hash table),可以動(dòng)態(tài)指定對(duì)象的property。
4. 在Firefox中可以使用"__proto__"屬性來(lái)查看一個(gè)對(duì)象的"prototype"。

下面我們來(lái)看一個(gè)簡(jiǎn)單的例子:

function Person() { this.age = 10; this.name = "test";}Person.prototype = new Object;var p = new Person;alert(p); // output "[object Object]"alert(p.__proto__); // output "[object Object]"

可以看出Person數(shù)據(jù)類型具有一個(gè)“prototype”,如果更改這個(gè)prototype,會(huì)影響到所有已經(jīng)產(chǎn)生的Person類型的對(duì)象,同時(shí)也會(huì)影響到以后建立的Person類型的對(duì)象。如果指定一個(gè)function的prototype屬性,則所有使用該function生成的對(duì)象實(shí)例中(使用new操作符)都具有該prototype,在Firefox 中,可以使用"__proto__"屬性訪問(wèn)。

通常情況下,我們講JS中的對(duì)象都繼承Object數(shù)據(jù)類型,這是如何體現(xiàn)的呢?我們把以上的程序稍微修改一下:

function Person() { this.age = 10; this.name = "test";}var p = new Person;alert(p); // output "[object Object]"alert(p.__proto__); // output "[object Object]"alert(p.__proto__.__proto__); // output "[object Object]"alert(p.__proto__.__proto__ == Object.prototype); // output "true"alert(p.__proto__.__proto__.__proto__); // output "null"

由以上程序可以看到,Person的"prototype"(在這里,沒(méi)有明確指定Person.prototype, 而是使用缺省值)的"prototype" (p.__proto__.__proto__)正是Object.prototype, Object.prototype是prototype chain的終點(diǎn)(其自己的祖先為null)。

在JS中,Object是function,同時(shí),所有function的實(shí)例,也都是Object。請(qǐng)看如下程序:

/* Object, Function都是function數(shù)據(jù)類型 */alert(typeof Object); // output "function"alert(typeof Function); // output "function"/* Function的prototype是一個(gè)空f(shuō)unction */alert(Function.prototype); // output "function() {}"alert(Function.__proto__ == Function.prototype); // output "true"/* function是object, 其prototype chain的終點(diǎn)是Object.prototype */alert(Function.__proto__.__proto__ == Object.prototype); //output "true"/* Object是function的實(shí)例 */ alert(Object.__proto__ == Function.prototype); // output "true"alert(Object.__proto__.__proto__ == Object.prototype); // output "true"改變Function.prototype會(huì)影響到“Object”,改變Object.prototype會(huì)影響到所有function的實(shí)例。

相關(guān)文章

最新評(píng)論

栖霞市| 蒙阴县| 萍乡市| 乐平市| 永清县| 金秀| 大化| 永年县| 克什克腾旗| 抚顺县| 咸宁市| 威远县| 乌拉特中旗| 伊吾县| 陈巴尔虎旗| 泽普县| 乌拉特后旗| 张家港市| 崇仁县| 徐闻县| 九江县| 江城| 永定县| 昌平区| 波密县| 古浪县| 仁寿县| 五峰| 上杭县| 丹凤县| 南陵县| 渝中区| 双城市| 恩平市| 锦州市| 红安县| 丰台区| 酉阳| 黔西县| 静海县| 留坝县|