欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

Javascript面向對象編程

admin
2010年7月14日 1:40 本文熱度 5394
[b][color=#0000ff]---->什么是類和對象[br][/color][/b] 這是所有面向對象編程之前必須弄明白的.[br] 所謂類:簡單地說就是模板,說的專業一些,是一類具有某種性質的物的集合.比如:人就是一個類,車也是一個類,等等.[br] 所謂對象:就是類的具體實現.如上面所說,人是一個類,一個具體的人就是一個對象,比如張三.[br] [br] 對象是類的實例化后的結果.javascript中使用new關鍵字來實例化一個類,生成一個對象.[br] 例子:[br] function people(){ //javascript中一個function也是一個類,這里我們建立一個空的類people[br] }[br] [br] var zhangsan=new people; //實例化生成一個對象張三[br][br][b][color=#0000ff]---->一個具體形象的例子[/color][/b][br] /*-->最簡單的類:[br] *people類[br] * 屬性:性別,年齡,姓名[br] * 方法:說話[br] */[br] function people(name,sex,age){[br] this.name=name;[br] this.sex=sex;[br] this.age=age;[br] this.say=function(){[br] return "我叫"+this.name;[br] }[br] }[br] [br] 使用時:[br] var zhangsan=new people;[br] alert(zhangsan.say());[br] var lisi=new people;[br] alert(lizi.say());[br] 說明:[br] 上面使用了this關鍵字,this總是指向當前的對象,在上面例子中,zhangsan.say中具有this.name,這里的this是當前的對象zhangsan.后面lisi.say則是指向當前對象lisi[br] 對象具有屬性,上面的name,sex和age就是對象的屬性.我們這樣可以訪問,如lisi.name,zhangsan.age[br] 對象還具有方法,比如上面的say.方法是通過構造函數實現的.使用時,如上面,用lisi.say(),zhangsan.say()[br] [br] 當然我們還可以在實例化對象后為對象添加新的屬性和方法.比如:[br] zhangsan.girlfriend="小麗";[br] zhangsan.doing=function(){[br] return "i am eating";[br] }[br][br]---->javascript類/對象和其他面向對象語言的異同[br] 相同點:面向對象編程的思想都是一樣的,世界上所有的具體事物都可以看成對象,而這些事物從屬的集合都可以看成類.我們要做的是構造我們需要的類,在實例化成我們需要的對象為我們工作.[br] 不同點:其他面向對象編程的語言對于類/對象關心下面的事情:[br] 1.作用域:公用,私用,受保護,靜態.而javascript只有一種作用域:公用作用域.[br] 2.特性:繼承,多態.javascript不支持多態,繼承方面的內容將在"javascript對象的繼承"一文中介紹[br][br][color=#0000ff][b]---->構建javascript類/對象的方式[/b][/color][br] 首先,可以大致定義出下面幾種類型:[br] 1.工廠方式[br] 2.構造函數方式[br] 3.原型方式[br] 4.混合的構造函數/原型方式[br] 5.動態原型方法[br] 6.混合工廠方式[br] [br] 具體說明:[br] [b][color=#ff0000] a.工廠方式:[/color][/b][br] 所謂工廠方式,是指先建立對象,然后再往對象里面添加屬性和方法.[br] eg.1[br] var zhangsan=new object; //創建對象[br] zhangsan.name="張三"; //給對象添加屬性[br] zhangsan.say=function(){ //給對象增加方法[br] alert("我叫張三");[br] }[br] eg.2 上面的例子沒有封裝性,我們可以使用函數封裝,實現多重利用[br] function people(){[br] var p_object=new object;[br] p_object.name="張三";[br] p_object.say=function(){[br] alert("我叫張三");[br] }[br] return p_object; //返回對象[br] }[br] var zhangsan=people;[br] var lisi=people;[br] 上面zhangsan和lisi兩個對象具有完全相同的屬性和方法,都叫"張三"(name屬性),都會說"我叫張三"(say()方法)[br] eg.3 通過傳遞參數改進eg.2[br] function people(name){[br] var p_object=new object;[br] p_object.name=name;[br] p_object.say=function(){[br] alert("我叫"+this.name);[br] }[br] return p_object; //返回對象[br] }[br] var zhangsan=people("張三");[br] var lisi=people("李四");[br] 總結:[br] 工廠方式,總是先創建一個對象,再往對象中添加你需要的屬性和方法.但這種做法對于封裝性和多種利用性不是很有利,這導致了這種對象的構造方法不被提倡.[br] 使用工廠方式總是為每個對象創建獨立的函數版本.[br] 這類方式使用封裝然后調用新對象的時候不使用new創建對象.
[p]b.構造函數方式:[br] 所謂構造函數方式,就像我給出的例子"一個具體形象的例子",就是采用構造函數的方式.它和工廠方式的區別是不再在函數內部創建一個對象.而是通過this關鍵字指向當前對象.[br] 構造函數的例子不再給出.[br] 構造函數和工廠方式一樣,會重復生成函數,為每個版本的對象創建獨立的函數版本.[br] [br] c.原型方式[br] 所謂原型方式,就是利用prototype屬性來實現屬性和方法的繼承[br] eg.1[br] function people(){[br] }[br] [br] people.prototype.name="張三";[br] people.prototype.say=function(){[br] alert("我叫"+this.name);[br] };[br] [br] var zhangsan=new people();[br] var lisi=new people();[br] 原型方式不能通過構造函數傳遞參數初始化屬性的值,因為所有的屬性和方法都是通過prototype添加的[br] [br] d.混合的構造函數/原型方式[br] 對于對象的屬性,使用構造函數的方式[br] 對于對象的方法,使用原型方式[br] eg.1[br] function people(name){[br] this.name=name;[br] }[br] people.prototype.say=function(){[br] return "我的名字叫"+this.name;[br] };[br] [br] var zhangsan=new people("張三");[br] document.write(zhangsan.say());[br] [br] eg.2 我們也可以把prototype寫入類,實現視覺上的封裝.[br] function people(name){[br] this.name=name;[br] people.prototype.say=function(){[br] return "我的名字叫"+this.name;[br] };[br] }[br] [br] var zhangsan=new people("張三");[br] document.write(zhangsan.say());[br] [br] 總結:這種構造類/對象的方法是推薦使用的[br] [br] e.動態原型方式[br] 這是在混合的構造函數/原型方式上改進的一種方式(提供更友好的編碼風格),他們功能是等價的[br] eg.1[br] function people(name){[br] this.name=name;[br] if(typeof people._initialized=="undefined"){[br] people.prototype.say=function(){[br] return "我的名字叫"+this.name;[br] };[br] people._initialized=true;[br] }[br] }[br] var zhangsan=new people("張三");[br] document.write(zhangsan.say());[br] var lisi=new people("李四");[br] document.write(lisi.say());[br] 這樣處理的目的是創建對象的方法后下一次使用時不要再創建.[br] 由于上面的原因,動態原型方式也是javascript中常用的一種創建類/對象的一種方式[br] [br] f.混合工廠方式[br] 混合工廠方式幾乎和工廠方式是一樣的.它同樣是先構造對象,然后再往對象中添加屬性和方法.不同的是,混合工廠方式生成對象時依舊使用new關鍵字.[br] eg.1[br] function people(){[br] var p_object=new object;[br] p_object.name="張三";[br] p_object.say=function(){[br] alert("我叫張三");[br] }[br] return p_object; //返回對象[br] }[br] var zhangsan=new people;[br] var lisi=new people;[br] zhangsan.say();[br] lisi.say();[br] 混合工廠方式和工廠方式以及經典方式(構造函數,原型方式)一樣會產生問題,不推薦使用[br] [br] 對各種構建類/對象方式的總結:[br] 通常地,我們使用混合的構造函數/原型方式,即屬性使用構造函數方式,方法采用原型方式.當然,加強地,我們可以使用動態原型方式.[br] 上面兩種方式是推薦使用的.[br] [br] [br]---->關于prototype的其他功能[br] 1.給對象(包括本地對象)添加新的方法[br] 比如array對象,你可能需要添加一個方法tohexstring,你可以這樣做:[br] array.prototype.tohexstring=function(){[br] //code here[br] }[br] 2.重定義方法[br] 實質是讓方法指向一個新的函數[br] array.prototype.tohexstring=function(){[br] //other code href[br] }[/p]

該文章在 2010/7/14 1:40:00 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved