天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

JavaScript面向對象之體會[總結]

JavaScript的面向對象設計有點牽強,畢竟JavaScript語言本身沒有高級語言嚴謹。看這篇文章之前,希望大家了解c++、Java、c#等高級語言,有面向對象編程的基礎知識。
1.類的定義:
function ClassName(){
}
大家可以發現類的定義形式是和函數是一樣的。
其實函數和類只有在使用的時候才能分辨出來,比如我們在一個頁面中分別使用他們:
<script language="Javascript">
function A(){
alert('hello');
}

//A作為函數來使用
A();

//A作為類來使用,從類A派生出一個obj對象
var obj=new A();
</script>

2.類的成員:
function ClassName(){
//定義公有變量
this.property1=0;
//定義公有方法
this.method1=function(){
//判斷this.a是否賦值
if(this.a != undefined)
alert(this.a);
}

//另外一種方法的定義形式
this.method3=funcA;

//定義私有成員
var pram1=1;
var method2=function(){
alert('');
}
}
//funcA是方法method3的處理函數
function funcA(){
alert('');
}
上面的代碼慢慢來給大家解釋:
有this開頭的都是類的成員,而且都是公有(public)的。
比如:property1是類的屬性、method1是類的方法;
類的成員不需要使用var來定義,沒有使用this前綴的都是私有變量。
比如:pram1是私有變量,method2是私有方法;
類的屬性可以不在類中定義,不要初始化的屬性可以不定義,在其他地方仍可以調用;
比如:在method1里面要輸出a屬性,在整個類里面就沒有定義a屬性,我們在創建對象的時候可以給它賦值。
var obj=new ClassName()
obj.a="hello Javascript";
obj.method1();
類的方法可以通過this.method=function(){}來定義,比如method1方法;
也可以通過this.method=funcName來定義,將方法指定讓某個函數來處理,比如method3;

3.類的繼承:
function classA(){
this.property1='hello';
this.method1=function (){
alert(this.property1);
}
}

function classB(){
}
//繼承classA
classB.prototype=new classA();

//給classB添加PI屬性
classB.prototype.PI=3.1415926;
//給classB添加showPI方法
classB.prototype.showPI=function(){
alert(this.PI);
}
通過使用prototype對象,將類classA的實例賦值給prototype對象,從而classB繼承了classA的所有成員;
比如:classB.prototype=new classA();
同時也可以通過prototype在類外給類從新添加成員(這個是別的高級語言所沒有的功能);
比如:classB.prototype.PI和classB.prototype.showPI

4.類方法的重載:
類方法的重載在類的構造函數中使用的比較多,比如:類中有兩個同名的方法而不同參數或不同參數類型。JavaScript從形式上來說不支持類方法重載,我們可以通過它的arguments屬性來完成對類方法的重載:
function classA(){
//獲取參數個數
//注意this.arguments.length是錯誤的
var num=classA.arguments.length;

this.method1=function(){
if(num==0){
alert(0);
}
if(num==1){
alert(1);
}
}
}
類或函數名的arguments屬性返回一個數組包含所有參數;
比如:classA.arguments.length可以獲取參數的個數,classA.arguments[0]獲取第一個參數的值
根據需要,通過獲取參數個數或參數值,從而同一個函數或類具有了不同的功能,比如:
var obj= new classA();
obj.method1();//輸出了0
var obj1= new classA(5);
obj1.method1();//輸出了1

5.對象的定義:
//對象是類的實例,定義一個類,作為一個對象的模板
function A(){
this.a=1;
this.b=2;
this.add=function(){
return this.a+this.b;
}
}
//定義一個對象
var obj=new A();
//賦值類屬性
obj.a=5;
obj.b=6;
//調用類方法
var sum=obj.add();

另外一種定義方法:
var obj={
a:1,
b:2,
add:function(){
return this.a + this.b;
}
}

這種方法定義的對象,把其類的結構也一起定義了,適合只使用一次的類
定義屬性和方法的時候不需要使用this關鍵字,":"后直接賦值即可
但是方法中使用屬性,需要使用this關鍵字

本文只是本人個人的經驗和理解,估計我寫的和一些書上有些不一樣,相信看了之后一定能很快理解。此文章只起到拋磚引玉之作用,具體的項目需求還要具體對待。涉及所有例子均親自調試無誤,如有錯誤請指正。

JavaScript技術JavaScript面向對象之體會[總結],轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 成人人猿泰山 | 久久免费精品一区二区 | YELLOW在线观看高清视频免费 | 久久热这里只有 精品 | 99re久久这里只有精品 | 免费看黄的片多多APP下载 | 奇米精品一区二区三区在线观看 | yellow2019在线观看视频 | 好爽胸大好深好多水 | 久久久无码精品无码国产人妻丝瓜 | 脱女学小内内摸出水网站免费 | 精品一区二区三区免费毛片 | 熟女人妻水多爽中文字幕 | 久久机热视频 这里只有精品首页 | cntv官网 | 另类专区hy777 | 好男人好资源在线观看 | hdxxxx58丝袜连裤袜 | 天美麻豆成人AV精品视频 | 亚洲伊人情人综合网站 | 纯肉巨黄H爆粗口男男分卷阅读 | 秘密教学93话恩爱久等了免费 | 入禽太深免费高清在线观看5 | 日韩亚洲欧美中文在线 | 精品国产露脸久久AV麻豆 | 国产亚洲精品久久久久久无码网站 | 午夜一区欧美二区高清三区 | 欧美牲交视频免费观看K8经典 | 中文字幕在线观看亚洲视频 | 果冻传媒视频在线播放 免费观看 | 亚洲视频无码高清在线 | 久久婷婷五月综合色丁香 | 老太婆性BBWBBW | 嗯啊…嗯np男男双性总受 | 亚洲AVAV天堂AV在线网爱情 | 十九禁啊啪射视频在线观看 | 欧美阿v天堂视频在99线 | 亚洲欧美一级久久精品 | 日韩精品欧美亚洲高清有无 | 亚洲.日韩.欧美另类 | 国内精品乱码卡一卡2卡三卡新区 |