在JavaScript語(yǔ)言中,通常使用Prototype來(lái)實(shí)現(xiàn)OO。在這里,我們不對(duì)JavaScript的OO實(shí)現(xiàn)進(jìn)行過(guò)多的探討,著重來(lái)看一下JS中對(duì)象的 " /> 1024在线看片你懂得,亚州精品视频,欧美mv日韩mv国产网站app

色尼玛亚洲综合影院,亚洲3atv精品一区二区三区,麻豆freexxxx性91精品,欧美在线91

javascript prototype,executing,context,closure

要學(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ù)類(lèi)型:string,number,boolean,object,function(注意:首字母均為小寫(xiě))。
2 “Object”, “String”, “Date”等內(nèi)置數(shù)據(jù)類(lèi)型,在JS中實(shí)際上是函數(shù)名稱(chēng)(使用"alert(typeof Object)"可以驗(yàn)證,輸出為"function")。我們通常指的類(lèi)型為"Date"的數(shù)據(jù)類(lèi)型,實(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ù)類(lèi)型具有一個(gè)“prototype”,如果更改這個(gè)prototype,會(huì)影響到所有已經(jīng)產(chǎn)生的Person類(lèi)型的對(duì)象,同時(shí)也會(huì)影響到以后建立的Person類(lèi)型的對(duì)象。如果指定一個(gè)function的prototype屬性,則所有使用該function生成的對(duì)象實(shí)例中(使用new操作符)都具有該prototype,在Firefox 中,可以使用"__proto__"屬性訪問(wèn)。

通常情況下,我們講JS中的對(duì)象都繼承Object數(shù)據(jù)類(lèi)型,這是如何體現(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ù)類(lèi)型 */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í)例。

JavaScript技術(shù)javascript prototype,executing,context,closure,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 屏边| 台安县| 桐庐县| 措美县| 明溪县| 特克斯县| 彭阳县| 辛集市| 海口市| 南康市| 泾川县| 宁波市| 莱西市| 昌宁县| 察雅县| 营山县| 饶阳县| 青州市| 保亭| 神木县| 黄平县| 渭南市| 曲阜市| 常熟市| 苏尼特左旗| 双牌县| 彭州市| 乌拉特前旗| 都江堰市| 玉环县| 舟曲县| 抚宁县| 合江县| 漳州市| 六盘水市| 巴中市| 龙陵县| 大新县| 建宁县| 宁武县| 宝鸡市|