欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Javascript面向?qū)ο缶幊?/h1>
 更新時(shí)間:2012年03月18日 14:23:55   作者:  
Javascript是一種面向(基于)對(duì)象的動(dòng)態(tài)腳本語(yǔ)言,是一種基于對(duì)象(Object)和事件驅(qū)動(dòng)(EventDriven)并具有安全性能的腳本語(yǔ)言。他具有面向?qū)ο笳Z(yǔ)言所特有的各種特性,比如封裝、繼承及多態(tài)等

Javascript的重要性
使用率
1、在web應(yīng)用中,涉及到前端界面編程基本上都要用到j(luò)avascript語(yǔ)言;
2、Web2.0及Ajax推動(dòng)了javascript語(yǔ)言。
3、隨著大量的c/s應(yīng)用轉(zhuǎn)向b/s,富客戶端技術(shù)的不斷推廣,javascript語(yǔ)言的應(yīng)用范圍還將不斷加大;
javascript的特點(diǎn)
簡(jiǎn)單
動(dòng)態(tài)
基于對(duì)象(面向?qū)ο?

Javascript面向?qū)ο蟾攀?
Javascript是一種面向(基于)對(duì)象的動(dòng)態(tài)腳本語(yǔ)言,是一種基于對(duì)象(Object)和事件驅(qū)動(dòng)(EventDriven)并具有安全性能的腳本語(yǔ)言。他具有面向?qū)ο笳Z(yǔ)言所特有的各種特性,比如封裝、繼承及多態(tài)等。但對(duì)于大多數(shù)人說(shuō),我們只把javascript做為一個(gè)函數(shù)式語(yǔ)言,只把他用于一些簡(jiǎn)單的前端數(shù)據(jù)輸入驗(yàn)證以及實(shí)現(xiàn)一些簡(jiǎn)單的頁(yè)面動(dòng)態(tài)效果等,我們沒能完全把握動(dòng)態(tài)語(yǔ)言的各種特性。
在很多優(yōu)秀的Ajax框架中,比如ExtJS、JQuery等,大量使用了javascript的面向?qū)ο筇匦?,要使用好ext技術(shù),javascript的高級(jí)特性,面向?qū)ο笳Z(yǔ)言特性是我們必須完全把握的。

Javascript的相關(guān)知識(shí)
Javascript的發(fā)展歷程
Javascript的三大組成部分
ECMAScript
語(yǔ)法\數(shù)據(jù)類型\語(yǔ)句\關(guān)鍵字\保留字\操作符\對(duì)象
DOM(Document Object Model)
BOM(Browser Object Model)

JavaScript靈活特性探討
1、動(dòng)態(tài)語(yǔ)言的靈性測(cè)試
Javascript作為一種動(dòng)態(tài)語(yǔ)言,具有非常靈活的我發(fā),在使用的過程中需要靈活掌握及應(yīng)用他的動(dòng)態(tài)特性,才會(huì)得心應(yīng)手。
思考下面的輸出

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

function Animal(name){
this.name=name;
this.age=0;
};
var a1=Animal;//輸出:
var a2=Animal();//輸出:
var a3=new Animal();//輸出:
var a4=new Animal;//輸出:


Javascript中的數(shù)據(jù)類型
基本數(shù)據(jù)類型
數(shù)字(Numbers)
字符串(Strings)
布爾Boolean
特殊值(null、undefined、NaN)。
對(duì)象類型Object
對(duì)象屬于復(fù)雜的數(shù)據(jù)類型,對(duì)象下面可以包含基本類型、對(duì)象、函數(shù)等,數(shù)組是一種對(duì)象類型。對(duì)于javascript來(lái)說(shuō),可以說(shuō)一切都是對(duì)象,包括類!。
var c=new Object();
1、數(shù)字類型
  數(shù)字類型是所有語(yǔ)言中都存在的基本數(shù)據(jù)類型,javascript中的數(shù)字類型主要包括整型(Int)與浮點(diǎn)型(Float)兩種,但實(shí)質(zhì)兩種類型都是以浮點(diǎn)的形式保存在內(nèi)存中。數(shù)字類型在javascript中一般與數(shù)字常量的形式出現(xiàn)在程序中,一般情況下是基于10進(jìn)制的數(shù)據(jù),由0-9這10個(gè)數(shù)字組成,比如110、150等,而也可以是以0x開頭(由0-9以及a到f等16個(gè)字符組成)的16進(jìn)制數(shù)據(jù),比如0xff轉(zhuǎn)換成10進(jìn)制就是255(即 15*16 + 15 = 255);一些javascript實(shí)現(xiàn)還支持8進(jìn)制數(shù)據(jù),也就是以0開頭的數(shù)據(jù)(由0-7這8個(gè)數(shù)字組成),比如0377 這個(gè)八進(jìn)制數(shù)據(jù)轉(zhuǎn)換成10進(jìn)制就是255,即( 3*64 + 7*8 + 7 = 255 )。
2、字符類型
  字符串由各種字符、數(shù)字及特殊字符串組成,可以在程序中直接使用單引號(hào)或雙引號(hào)來(lái)生成字符串常量。字符串中不能有回車符,要在字符串包含回車需要使用轉(zhuǎn)義字符\n。下面是一些簡(jiǎn)單的字符串常量:
"" // The empty string: it has zero characters
'testing'
"3.14"
'name="myform"'
"Wouldn't you prefer O'Reilly's book?"
"This string\nhas two lines"
"π is the ratio of a circle's circumference to its diameter"

3、布爾Boolean
布爾類型用來(lái)表示真或假,在javascript中,當(dāng)用于布爾運(yùn)算時(shí),除了0、空字符、null、undefined、NaN等以外的數(shù)據(jù)都是表示真。
if(0||""||false||null||undefined||NaN)alert("有一個(gè)條件返回true了");
布爾常量只有false及true,F(xiàn)alse及True不是常量。

4、對(duì)象類型
javascript是基于對(duì)象的語(yǔ)言,對(duì)象是其核心。

程序流程控制
順序結(jié)構(gòu)
if條件選擇語(yǔ)句
switch選擇語(yǔ)句
while循環(huán)語(yǔ)句
do while語(yǔ)句
for循環(huán)語(yǔ)句
break與continue語(yǔ)句

for...in循環(huán)語(yǔ)句
for(變量 in 集合或?qū)ο?
{
執(zhí)行語(yǔ)句塊
}
復(fù)制代碼 代碼如下:

<script language="javascript">
var as= [1,4,5,6],output="";
for(var x in as)
{
output += " x= " + as[x];
}
alert(output);
</script>
var as={id:5,name:'test'};
for(var x in as)
{
output += x+"="+as[x];
}
alert(output);

邏輯運(yùn)算符
&&
邏輯與,當(dāng)左右兩邊操作數(shù)都為true時(shí),返回值為true,否則返回false。

邏輯或,當(dāng)左右兩邊操作數(shù)都為false時(shí),返回其中第一個(gè)不為false的值或者false。
!
邏輯非,當(dāng)操作數(shù)為true時(shí),返回值為false,否則返回true。
注意:
在邏輯運(yùn)算中,0、""、false、null、undefined、NaN均表示false。

函數(shù)的定義及調(diào)用
定義一個(gè)函數(shù)的格式如下:
function 函數(shù)名(參數(shù)列表)
{
程序代碼
return 表達(dá)式;
}
復(fù)制代碼 代碼如下:

<script language="javascript">
var msg = "全局變量";
function square(x,y)
{
var sum;
sum = x*x + y*y;
return sum;
}
function show()
{
var msg = "局部變量";
alert(msg);
}
//var sum;
alert("sum=" + sum);
sum=square(2,3);
alert("sum=" + sum);
show();
</script>

undefined
alert("sum=" + square(2,3));

對(duì)函數(shù)進(jìn)行調(diào)用的幾種方式:
函數(shù)名(傳遞給函數(shù)的參數(shù)1,傳遞給函數(shù)的參數(shù)2,….)
變量 = 函數(shù)名(傳遞給函數(shù)的參數(shù)1,傳遞給函數(shù)的參數(shù)2,….)
對(duì)于有返回值的函數(shù)調(diào)用,也可以在程序中直接使用返回的結(jié)果,例如:alert("sum=“ + square(2,3));
不指定任何函數(shù)值的函數(shù),返回undefined。

函數(shù)的參數(shù)可變性(arguments)
復(fù)制代碼 代碼如下:

<script language="javascript">
function sum()
{
var s= 0;
for(var i=0; i<arguments.length; i++)
s+= arguments[i];
return s;
}
sum(1,2);
sum(3,4,5);
</script>

最多255個(gè)。通過函數(shù)對(duì)象的length可以返回函數(shù)希望提供的參數(shù)個(gè)數(shù)。
函數(shù)參數(shù)的可變性
function add(s,b){
if(s)alert(“第一個(gè)參數(shù)是:”+s);
if(!b)alert(“沒有第二個(gè)參數(shù)!”);
else alert(“第二個(gè)參數(shù)是:”+b);
}
arguments
Arguments是一個(gè)類似數(shù)組但不是數(shù)組的對(duì)象,說(shuō)它類似數(shù)組是因?yàn)槠渚哂袛?shù)組一樣的訪問性質(zhì)及方式,可以由arguments[n]來(lái)訪問對(duì)應(yīng)的單個(gè)參數(shù)的值,并擁有數(shù)組長(zhǎng)度屬性length。
如何寫一個(gè)方法,能實(shí)現(xiàn)任意多個(gè)數(shù)的求和?
alert(sum(1,2,3));//輸出6
alert(sum(100,200,500,900));//輸出1700

使用Function類創(chuàng)建函數(shù)
創(chuàng)建動(dòng)態(tài)函數(shù)的基本語(yǔ)法格式:
var varName = new Function(argument1,...,lastArgument);
說(shuō)明:
所有的參數(shù)都必須是字符串型的,最后的參數(shù)必須是這個(gè)動(dòng)態(tài)函數(shù)的功能程序代碼。
例子:
復(fù)制代碼 代碼如下:

<script language="javascript">
var square = new Function ("x","y",
"var sum;sum= x*x + y*y;return sum;");
alert(square(3,2));
var alsoDoSquare = doAdd;
alert(alsoDoSquare (3,2));
</script>


多想一想:
動(dòng)態(tài)函數(shù)有什么作用,在什么情況下用動(dòng)態(tài)函數(shù)。

閉包(closure)
Javascript閉包就是在另一個(gè)作用域中保存了一份它從上一級(jí)函數(shù)或作用域取得的變量(鍵值對(duì)),而這些鍵值對(duì)是不會(huì)隨上一級(jí)函數(shù)的執(zhí)行完成而銷毀。
這樣在執(zhí)行完var c=a()后,變量c實(shí)際上是指向了函數(shù)b,b中用到了變量i,再執(zhí)行c()后就會(huì)彈出一個(gè)窗口顯示i的值(第一次為1)。這段代碼其實(shí)就創(chuàng)建了一個(gè)閉包,為什么?因?yàn)楹瘮?shù)a外的變量c引用了函數(shù)a內(nèi)的函數(shù)b,就是說(shuō):

當(dāng)函數(shù)a的內(nèi)部函數(shù)b被函數(shù)a外的一個(gè)變量引用的時(shí)候,就創(chuàng)建了一個(gè)我們通常所謂的“閉包”。
復(fù)制代碼 代碼如下:

function a() {
var i = 0;
function b() {
alert(++i);
}
return b;
}
var c = a();
c();

閉包的作用就是在a執(zhí)行完并返回后,閉包使得Javascript的垃圾回收機(jī)制GC不會(huì)收回a所占用的資源,因?yàn)閍的內(nèi)部函數(shù)b的執(zhí)行需要依賴a中的變量。

函數(shù)的作用域及this
1、在函數(shù)或方法中可以使用this來(lái)引用函數(shù)所在的當(dāng)前對(duì)象
2、當(dāng)沒有明確指定函數(shù)的當(dāng)前對(duì)象時(shí),作用域?yàn)閣indow
3、可以使用call及apply來(lái)動(dòng)態(tài)改變函數(shù)執(zhí)行的作用域

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

var b1={v:"this is b1"};
var b2={v:"this is b2"};
function b(d){
alert(this.v);
}
b();//輸出:
window.b();//輸出:
b.call(b1);//輸出:
b.apply(b2);//輸出:


詞法作用域(lexcical scope)。通俗地講,就是javascript變量的作用域是在定義時(shí)決定而不是執(zhí)行時(shí)決定,也就是說(shuō)詞法作用域取決于源碼,編譯器通過靜態(tài)分析就能確定,因此詞法作用域也叫做靜態(tài)作用域(static scope)。但需要注意,with和eval的語(yǔ)義無(wú)法僅通過靜態(tài)技術(shù)實(shí)現(xiàn),所以只能說(shuō)javascript的作用域機(jī)制非常接近詞法作用域(lexical scope).
javascript引擎在執(zhí)行每個(gè)函數(shù)實(shí)例時(shí),都會(huì)創(chuàng)建一個(gè)執(zhí)行環(huán)境(execution context)。執(zhí)行環(huán)境中包含一個(gè)調(diào)用對(duì)象(call object)
調(diào)用對(duì)象是一個(gè)scriptObject結(jié)構(gòu)(scriptObject是與函數(shù)相關(guān)的一套靜態(tài)系統(tǒng),與函數(shù)實(shí)例的生命周期保持一致),用來(lái)保存內(nèi)部變量表varDecls、內(nèi)嵌函數(shù)表funDecls、父級(jí)引用列表 upvalue等語(yǔ)法分析結(jié)構(gòu)(注意varDecls和funDecls等信息是在語(yǔ)法分析階段就已經(jīng)得到,并保存在語(yǔ)法樹中。函數(shù)實(shí)例執(zhí)行時(shí),會(huì)將這些信息從語(yǔ)法樹復(fù)制到scriptObject上)。

apply and call:它們的作用都是將函數(shù)綁定到另外一個(gè)對(duì)象上去運(yùn)行,兩者僅在定義參數(shù)方式有所區(qū)別:
apply(thisArg,argArray);
call(thisArg[,arg1,arg2…] ]);
即所有函數(shù)內(nèi)部的this指針都會(huì)被賦值為thisArg,這可實(shí)現(xiàn)將函數(shù)作為另外一個(gè)對(duì)象的方法運(yùn)行的目的。

apply的說(shuō)明
如果 argArray 不是一個(gè)有效的數(shù)組或者不是 arguments 對(duì)象,那么將導(dǎo)致一個(gè) TypeError。如果沒有提供 argArray 和 thisArg任何一個(gè)參數(shù),那么 Global 對(duì)象將被用作 thisArg,并且無(wú)法被傳遞任何參數(shù)。

call的說(shuō)明
call 方法可將一個(gè)函數(shù)的對(duì)象上下文從初始的上下文改變?yōu)橛?thisArg指定的新對(duì)象。如果沒有提供 thisArg參數(shù),那么 Global 對(duì)象被用作 thisArg

重點(diǎn)(the point):
應(yīng)用call和apply還有一個(gè)技巧在里面,就是用call和apply應(yīng)用另一個(gè)函數(shù)(類)以后,當(dāng)前的函數(shù)(類)就具備了另一個(gè)函數(shù)(類)的方法或者是屬性。
在瀏覽執(zhí)行的javascript中,默認(rèn)情況下對(duì)象的作用域?yàn)閣indow。
c.run();
window.c.run();

JavaScript中的系統(tǒng)函數(shù)(Global類)
encodeURI及encodeURIComponent方法
返回對(duì)一個(gè)URI字符串編碼后的結(jié)果。
decodeURI及decodeURIComponent()方法
將一個(gè)已編碼的URI字符串解碼成最初始的字符串并返回。
parseInt方法
將一個(gè)字符串按指定的進(jìn)制轉(zhuǎn)換成一個(gè)整數(shù),語(yǔ)法格式為:parseInt(numString, [radix])。如果沒有指定第二個(gè)參數(shù),則前綴為 ‘0x' 的字符串被視為十六進(jìn)制,前綴為 ‘0' 的字符串被視為八進(jìn)制,所有其他字符串都被視為是十進(jìn)制。
parseFloat方法
將一個(gè)字符串轉(zhuǎn)換成對(duì)應(yīng)的小數(shù)。
isNaN方法
用于檢測(cè)parseInt和parseFloat方法的返回值是否為NaN。
escape方法
返回對(duì)一個(gè)字符串進(jìn)行編碼后的結(jié)果字符串。所有空格、標(biāo)點(diǎn)、重音符號(hào)以及任何其他非 ASCII 字符都用 %xx 編碼替換,其中xx等于表示該字符的Unicode編碼的十六進(jìn)制數(shù),字符值大于255的字符以%uxxxx格式存儲(chǔ)。
unescape 方法
將一個(gè)用escape方法編碼的結(jié)果字符串解碼成原始字符串并返回。
eval 方法
將其中的參數(shù)字符串作為一個(gè)JavaScript表達(dá)式執(zhí)行。

JavaScript的內(nèi)部類
動(dòng)態(tài)對(duì)象
使用“對(duì)象實(shí)例名.成員”的格式來(lái)訪問其屬性和方法。
靜態(tài)對(duì)象
直接使用“對(duì)象名.成員”的格式來(lái)訪問其屬性和方法。

Object類(對(duì)象)
Number類(對(duì)象)
String類 (對(duì)象)
Math類(對(duì)象)
Date類(對(duì)象)
toString方法

Object類
Object類是所有javascript類的基類,提供了一種創(chuàng)建自定義對(duì)象的簡(jiǎn)單方式,不需要程序員再定義構(gòu)造函數(shù)。
主要屬性:
constructor-對(duì)象的構(gòu)造函數(shù)
prototype-獲得類的prototype對(duì)象,static性質(zhì)
主要方法:
hasOwnProperty(property)-是否屬于本類定義的屬性
isPrototypeOf(object)-是否是指定類的prototype
propertyIsEnumerable(property)-是否可例舉的屬性
toString()-返回對(duì)象對(duì)應(yīng)的字符串
valueOf()-返回對(duì)象對(duì)應(yīng)的原始類型值

<script language="javascript">
function getAttributeValue(attr)
{
alert(person[attr]);
}
var person = new Object();
person.name = "zs";
person.age = 18;
getAttributeValue("name");
getAttributeValue("age");
</script>

Number類
Number類代表數(shù)據(jù)類,包含一些靜態(tài)的成員及數(shù)值處理的方法。
靜態(tài)屬性:
MAX_VALUE、MIN_VALUE、NEGATIVE_INFINITY、POSITIVE_INFINITY、NaN
主要方法:
toFixed(n)-取小數(shù)位數(shù),自動(dòng)四舍五入
toPrecision(n)-是否是指定類的prototype
propertyIsEnumerable(property)-是否可例舉的屬性
toString()-返回對(duì)象對(duì)應(yīng)的字符串
valueOf()-返回對(duì)象對(duì)應(yīng)的原始類型值

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

<script language="javascript">
var oNumberObject = new Number(99);
alert(oNumberObject.toFixed(2)); //outputs “99.00”
</script>


String類
length屬性
anchor、big、bold、fontcolor、link等方法
charAt方法
注意:一個(gè)字符串中的第一個(gè)字符的索引位置為0,依次類推。
charCodeAt方法
注意:返回的結(jié)果是字符的unicode編碼。
concat方法,連接字符串
indexOf方法及l(fā)astIndexOf方法
match、search方法
replace、split方法
slice方法
說(shuō)明:str1.slice(0)和str1.slice(0,-1)都是返回整個(gè)字符串。
substr、substring方法
substring方法返回的內(nèi)容不包含結(jié)束位置的字符。
toLowerCase、toUpperCase 方法

Math類
屬性:
E,代表數(shù)學(xué)常數(shù)e,約等于 2.718。
LN10,代表10的自然對(duì)數(shù),約等于 2.302。
LN2,代表2的自然對(duì)數(shù),約等于 0.693。
PI,代表數(shù)學(xué)常數(shù)∏的值,約等于 3.14159。
SQRT1-2,代表2 的平方根分之一,約等于0.707。
SQRT2,代表2 的平方根,約等于1.414。

方法:
abs方法,返回?cái)?shù)字的絕對(duì)值。
sin、cos方法,分別返回?cái)?shù)字的正弦、余弦值。
asin、acos方法,分別返回?cái)?shù)字的反正弦、反余弦值。
random方法,返回介于 0 和 1 之間的偽隨機(jī)數(shù)
Math對(duì)象是一個(gè)靜態(tài)類,不能使用new關(guān)鍵字創(chuàng)建對(duì)象實(shí)例,應(yīng)直接使用“對(duì)象名.成員”的格式來(lái)訪問其屬性或方法,例如,var num = Math.random();

Date類
toGMTString方法,返回Date對(duì)象實(shí)例所表示的日期的字符串形式,該字符串使用格林尼治標(biāo)準(zhǔn)時(shí)間 (GMT) 格式,例如,“05 Jan 1996 00:00:00 GMT”。
getYear、getMonth、getDate、getDay方法
getHours、getMinutes、getSeconds、getMilliseconds方法
getTime方法,返回自1970年1月1日0點(diǎn)0分0秒算起,至Date對(duì)象實(shí)例代表的時(shí)間為止的毫秒數(shù)。
復(fù)制代碼 代碼如下:

<script language="javascript">
var current_time = new Date();
var strDate = current_time.getYear() + "年";
strDate += current_time.getMonth() + "月";
strDate += current_time.getDate() + "日 ";
strDate += current_time.getHours() + ":";
strDate += current_time.getMinutes() + ":";
strDate += current_time.getSeconds();
alert(strDate);
</script>

構(gòu)造方法 :Date()、Date(dateVal) 、Date(year, month, date[, hours[, minutes[, seconds[,ms]]]])
parse方法,分析一個(gè)表示日期時(shí)間的字符串,返回它所表示的時(shí)間值,該值以自1970年1月1日0點(diǎn)0分0秒算起的毫秒值表示。parse方法屬于一個(gè)靜態(tài)方法 。

toString方法
toString 方法是JavaScript中的所有內(nèi)部對(duì)象的一個(gè)成員方法,它的主要作用就是將對(duì)象中的數(shù)據(jù)轉(zhuǎn)換成某種格式的字符串來(lái)表示,具體的轉(zhuǎn)換方式取決于對(duì)象的類型。

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

<script language="javascript">
var x = 328;
alert("hex=“ + x.toString(16) + " bin=“ + x.toString(2));
</script>

Array類
三種構(gòu)造方法:
Array()
Array(4)
Array(3.5,"abc",3)

數(shù)組排序例子:
復(fù)制代碼 代碼如下:

<script language="javascript">
var arr = new Array();
arr[0] = 3.5;
arr[1] = "abc"
arr[2] = 3;
arr.sort();
var x,str = "";
for(x in arr)
{
str += x + ":“ + arr[x] + "\n";
}
alert(str);
</script>

Array類的屬性及方法
length-獲得數(shù)組的長(zhǎng)度;
concat-連接數(shù)組;
join-把數(shù)組轉(zhuǎn)換成字符串;
pop-彈出一個(gè)元素;
push-放入一個(gè)元素;
reverse-顛倒數(shù)據(jù)中的元素順序;
shift-移出第一個(gè)元素;
slice-截取數(shù)組;
sort-排序數(shù)組;
unshift-在前面追加元素;

用對(duì)象的方式實(shí)現(xiàn)數(shù)組
復(fù)制代碼 代碼如下:

<script language="javascript">
function MyArray()
{
this.length = arguments.length;
for (var i=0; i<this.length;i++)
{
this[i] = arguments[i];
}
}
var str = "";
var arr = new MyArray(4,3.5,"abc");
for(var i=0; i<arr.length; i++)
{
str += arr[i] + "\n";
}
alert(str);
</script>
<script language="javascript">
function MyArray(size)
{
this.length = size;
for (var i=0; i<size; i++)
{
this[i] = "";
}
}
var arr = new MyArray(2);
arr[0] = 3;
arr[1] = "abc";
arr[2] = 4;
var x, str = "";
for(x in arr)
{
str += x + ":" + arr[x] + "\n";
}
alert(str);
</script>


用戶自定義類及對(duì)象
1、工廠方法-使用new Object創(chuàng)建對(duì)象并添加相關(guān)屬性;
2、使用構(gòu)造函數(shù)來(lái)定義類。
3、使用prototype
4、構(gòu)造函數(shù)及原型混合方式
5、動(dòng)態(tài)原型方式
實(shí)例
Car類(對(duì)象)
屬性:
color-顏色
doors-門的個(gè)數(shù)
price-價(jià)格
drivers-司機(jī)
方法:
showColor-顯示出車的顏色

typeof及instanceof 運(yùn)算符
delete操作符用來(lái)刪除一個(gè)對(duì)象的指定成員。
typeof xx-string返回xx對(duì)象的類型或undefined。
var d=7.5;
alert(typeof d);
alert(typeof d2);
alert(typeof new Object());
alert(typeof Object);

xx instanceof 類名,返回boolean類型:
復(fù)制代碼 代碼如下:

<script language="javascript">
var o = new String("ab");
alert(o instanceof String);
alert(o instanceof Number);
alert(o instanceof Object);
</script>


delete及void 操作符
delete操作符用來(lái)刪除一個(gè)對(duì)象的指定成員。
var d=new Object();
d.p1="this is p1";
alert(d.p1);
delete d.p1;
alert(d.p1);
delete只能刪除用戶自義的成員。
delete d.toString;
alert(d.toString());
void 用來(lái)把任意數(shù)字轉(zhuǎn)換為undefined。
var d=new Object();
alert(void(d));
運(yùn)用場(chǎng)景:
<a href=”javascript:window.open(‘a(chǎn)bout:blank')”>Click Me</a>

類的修改
1、prototype詳解
2、給已有類添加新方法
3、重新定義類的方法
4、超級(jí)后置綁定

prototype是Function對(duì)象的一個(gè)屬性,當(dāng)我們?cè)L問對(duì)象的一個(gè)成員時(shí),先在對(duì)象內(nèi)部找,如果找不到,則到對(duì)象所在類的prototype對(duì)象中找。

封裝
封裝:封裝,也就是把客觀事物封裝成抽象的類,并且類可以把自己的數(shù)據(jù)和方法只讓可信的類或者對(duì)象操作,對(duì)不可信的進(jìn)行信息隱藏。
javascript中,通過閉包可以實(shí)現(xiàn)封裝,看代碼例子。
涵蓋了javascript公有成員定義、私有成員定義、特權(quán)方法定義的簡(jiǎn)單示例!
復(fù)制代碼 代碼如下:

<script>
//定義一個(gè)javascript類
function JsClass(privateParam/* */,publicParam){//構(gòu)造函數(shù)
var priMember = privateParam; //私有變量
this.pubMember = publicParam; //公共變量
//定義私有方法
function priMethod(){
return "priMethod()";
}
//定義特權(quán)方法
//特權(quán)方法可以訪問所有成員
this.privilegedMethod = function(){
var str = "這是特權(quán)方法,我調(diào)用了\n";
str += " 私有變量:" + priMember +"\n";
str += " 私有方法:" + priMethod() +"\n";
str += " 公共變量:" + this.pubMember +"\n";
str += " 公共方法:" + this.pubMethod();

return str;
}
}
//添加公共方法
//不能調(diào)用私有變量和方法
JsClass.prototype.pubMethod = function(){
return "pubMethod()";
}

//使用 JsClass的實(shí)例
JsObject = new JsClass("priMember","pubMember");

//alert(JsObject.pubMember);//彈出pubMember信息
//alert(JsObject.priMember);//彈出undefined信息
//alert(JsObject.pubMethod());//彈出pubMethod信息
//alert(JsObject.priMethod());//彈出"對(duì)象不支持此屬性或方法"的錯(cuò)誤
alert(JsObject.privilegedMethod());
</script>



涵蓋了javascript公有成員定義、私有成員定義、特權(quán)方法定義的簡(jiǎn)單示例!
復(fù)制代碼 代碼如下:

<script>
//定義一個(gè)javascript類
function JsClass(privateParam/* */,publicParam){//構(gòu)造函數(shù)
var priMember = privateParam; //私有變量
this.pubMember = publicParam; //公共變量
//定義私有方法
function priMethod(){
return "priMethod()";
}
//定義特權(quán)方法
//特權(quán)方法可以訪問所有成員
this.privilegedMethod = function(){
var str = "這是特權(quán)方法,我調(diào)用了\n";
str += " 私有變量:" + priMember +"\n";
str += " 私有方法:" + priMethod() +"\n";
str += " 公共變量:" + this.pubMember +"\n";
str += " 公共方法:" + this.pubMethod();

return str;
}
}
//添加公共方法
//不能調(diào)用私有變量和方法
JsClass.prototype.pubMethod = function(){
return "pubMethod()";
}

//使用 JsClass的實(shí)例
JsObject = new JsClass("priMember","pubMember");

//alert(JsObject.pubMember);//彈出pubMember信息
//alert(JsObject.priMember);//彈出undefined信息
//alert(JsObject.pubMethod());//彈出pubMethod信息
//alert(JsObject.priMethod());//彈出"對(duì)象不支持此屬性或方法"的錯(cuò)誤
alert(JsObject.privilegedMethod());
</script>


繼承
面向?qū)ο缶幊?(OOP)語(yǔ)言的一個(gè)主要功能就是“繼承”。繼承是指這樣一種能力:它可以使用現(xiàn)有類的所有功能,并在無(wú)需重新編寫原來(lái)的類的情況下對(duì)這些功能進(jìn)行擴(kuò)展。
1、對(duì)象冒充
2、call及apply
3、原型鏈
4、混合方式

繼承-對(duì)象冒充
復(fù)制代碼 代碼如下:

function classA(name) {
this.name=name;
this.showName=function(){alert(this.name);}
}
function classB(name) {
this.newMethod = classA;
this.newMethod(name);
}
obj = new classA("hero");
objB = new classB("dby");
obj.showName(); // print hero
objB.showName(); // print dby 說(shuō)明classB 繼承了classA的方法.
對(duì)象冒充可以實(shí)現(xiàn)多重繼承 例如
function classz(){
this.newMethod = classX;
this.newMethod();
delete this.newMethod;
}

但是如果classX和classY有相同的屬性或者方法,classY具有高優(yōu)先級(jí).

繼承-call方法
call方法使與經(jīng)典的對(duì)象冒充法就相近的方法,它的第一個(gè)參數(shù)用作this的對(duì)象,其他參數(shù)都直接傳遞給函數(shù)自身.
復(fù)制代碼 代碼如下:

function sayName(perfix) {
alert(perfix+this.name);
}
obj= new Object();
obj.name="hero";
sayName.call(obj,"hello," );
function classA(name) {
this.name=name;
this.showName=function(){alert(this.name);};
}
function classB(name) {
classA.call(this,name);
}
objB = new classB("bing");
objB.showName();////說(shuō)明classB繼承classA的showName方法

繼承-apply方法
aplly()方法有2個(gè)參數(shù),一個(gè)用作this對(duì)象,一個(gè)使傳遞給函數(shù)的參數(shù)數(shù)組.
復(fù)制代碼 代碼如下:

function sayName(perfix) {
alert(perfix+this.name);
}
obj= new Object();
obj.name="hero";
sayName.aplly(obj,new Array("hello,") );

繼承-原型鏈
prototype對(duì)象的任何屬性和方法都會(huì)被傳遞給對(duì)應(yīng)類的所有實(shí)例,原型鏈就是用這種方式來(lái)顯現(xiàn)繼承.
function classA (){}
classA.prototype.name="hero";
classA.prototype.showName=function(){alert(this.name)}
function classB(){}
classB.prototype=new classA();
objb = new classB()
objb.showName();//print hero 說(shuō)明b繼承了a的方法
這里需要注意 調(diào)用classA的構(gòu)造函數(shù)時(shí),沒有給它傳遞參數(shù),這是原型鏈的標(biāo)準(zhǔn)做法,確保函數(shù)的構(gòu)造函數(shù)沒有任何參數(shù).
并且 子類的所有屬性和方法,必須出現(xiàn)在prototype屬性被賦值后,應(yīng)為在它之前賦的值會(huì)被刪除.因?yàn)閷?duì)象的prototype屬性被替換成了新對(duì)象,添加了新方法的原始對(duì)象將被銷毀.

繼承-混和方式
就是用冒充方式 定義構(gòu)造函數(shù)屬性,用原型法定義對(duì)象方法.
復(fù)制代碼 代碼如下:

function classA(name) {
this.name=name;
}
classA.prototype.showName=function(){alert(this.name)}
function classB(name) {
classA.call(this,name);
}
classB.prototype = new classA();
classB.prototype.showName1=function(){alert(this.name+"*****");};
obj = new classB("hero");
obj.showName();
obj.showName1();

在classB的構(gòu)造函數(shù)中通過調(diào)用call方法 繼承classA中的name屬性,用原型鏈來(lái)繼承classA的showName方法.

javascript中的方法重載探討
方法重載(overloading)及覆蓋(overriding)
Javascript 中的方法本身就是一個(gè)帶可變參數(shù)的,不支持重載操作。但我們可以在方法體內(nèi)自由檢測(cè)方法的參數(shù)情況,來(lái)實(shí)現(xiàn)重載的效果。(使用可變參數(shù)或arguments 來(lái)模擬重載的示例)。
覆蓋,也稱為改寫,就是指子類中定義的方法替換掉父類的方法

javascript中多態(tài)性(polymorphisn)探討
多態(tài)性(polymorphisn):是允許你將父對(duì)象設(shè)置成為和一個(gè)或更多的他的子對(duì)象相等的技術(shù),賦值之后,父對(duì)象就可以根據(jù)當(dāng)前賦值給它的子對(duì)象的特性以不同的方式運(yùn)作。簡(jiǎn)單的說(shuō),就是一句話:允許將子類類型的指針賦值給父類類型的指針。多態(tài)是為了實(shí)現(xiàn)另一個(gè)目的——接口重用!多態(tài)的作用,就是為了類在繼承和派生的時(shí)候,保證使用“家譜”中任一類的實(shí)例的某一屬性時(shí)的正確調(diào)用。
var a=[a1,a2,a3];

相關(guān)文章

最新評(píng)論