當前位置:
首頁 >
面向对象 OOP
發(fā)布時間:2025/6/17
59
豆豆
[面向?qū)ο缶幊蘋OP] 1 語言的分類 面向機器 :匯編語言 面向過程 :c語言 面向?qū)ο?:c++ Java PHP等 2 面向過程與面向?qū)ο?/span> 面向過程:專注于如何去解決一個問題的過程,編程特點是一個函數(shù)去實現(xiàn)過程操作,沒有類與對象的概念 面向?qū)ο?#xff1a;專注于有哪一個對象實體去解決這個問題,編程特點是:出現(xiàn)一個個的類,由類去生成對象 【面向?qū)ο蟮娜筇卣鳌?繼承 封裝 多態(tài) 類與對象的關系 1類 : 一群有相同特征(屬性)和行為(方法)的集合 人類 屬性:身高 ,年齡。體重, 方法:吃飯 睡覺 敲代碼 2對象: 從類中,拿出的具有確定屬性值和方法的個體 張三 屬性 身高180 方法 說話 3類和對象的關系 類是抽象的,對象是具體的。類是對象的抽象化,對象是類的具體化 通俗來講,類是一個抽象的概念,表示具有相同屬性和行為的集合,但是類僅僅表明這類群體具有向同的屬性 但是沒有具體的屬性值 而對象是對類的屬性進行具體賦值后,而得到的一個具體的個體 4實用類和對象的步驟 ① 創(chuàng)建一個類(構(gòu)造函數(shù)) 類名:必須要每個單詞的首字母都大寫 Function 類名(屬性一){ this.屬性=屬性一 this.方法=Function(){} this 指向誰?即將調(diào)用當前構(gòu)造函數(shù)的對象 } ② 通過類,實例化出一個新對象 var obj = new 類名(屬性——value) 原構(gòu)造函數(shù)中的this,指向新創(chuàng)建的obj對象 obj.方法(); 調(diào)用方法 obj.屬性(); 調(diào)用屬性 實例化對象,會執(zhí)行創(chuàng)造函數(shù) 5 兩個重要的屬性 constructor: 返回當前對象的構(gòu)造函數(shù) 只有對象才有,返回的是構(gòu)造函數(shù)-類 >>> zhangsan.constructor == Person true >>> 對象的constructor,位于_proto_原型對象上 (后續(xù)講解) instanceof:判斷對象是否是某個類的實例 >>>zhangsan instanceof Person true >>>preson instanceof Objiect true >>>zhangsan instanceof Object true 6廣義對象與狹隘對象 狹義對象:只有屬性,方法。除此之外沒有任何東西 var obj = {}; var obj = new Object(); 廣義對象: 除了用字面量聲明的基本數(shù)據(jù)類型之外分,萬物接對象,換句話說,能夠添加屬性和方法的變量,就是對象 var s = "1" 不是對象 var s = new String("1") 是對象 ①定義一個(類)構(gòu)造函數(shù) function Person(name,age,sex){ 類的屬性 this.name=name; this.age= age; this.sex= sex; 類的方法 this.say = function(){ alert("我叫"+this.name+";今年"+this.age+"歲;"+"我是一個"+this.sex+"生") } } 從類中,實例化出一個對象,并給對象的屬性賦值 var zhangsan = new Person("張三",18,"男"); zhangsan.say(); var lisi = new Person("李四",12,"男"); lisi.say(); var wanger = new Person("王二",14,"女"); wanger.say(); Person(); var arr = [Person,1,2,3] arr[0](); person.height = 10; console.log(zhangsan); console.log(zhangsan instanceof Person); console.log(zhangsan instanceof Object); </script> [成員屬性與成員方法] 1、在構(gòu)造函數(shù)中聲明,通過 this屬性聲明,或者實例化出對象后,通過"對象.屬性"追加的,都屬于成員屬性、或成員方法也叫實力屬性與實例方法 成員屬性/方法 是屬于實例化出的這個對象 通過"對象.屬性"調(diào)用 [靜態(tài)屬性和靜態(tài)方法] 2、通過類名.屬性名 "類名.方法名"聲明的變量,稱為靜態(tài)屬性、靜態(tài)方法;也叫類屬性,類方法 類屬性/類方法 是屬于類的(屬于構(gòu)造函數(shù)) 通過"類名.屬性"調(diào)用 3、成員屬性是屬于實例化出的對象的,會出現(xiàn)在新對象的屬性上 靜態(tài)屬性是屬于構(gòu)造函數(shù)自己的,是不會出現(xiàn)在新對象的屬性上 4 JS對象屬性的刪除 ①對象無需手動刪除,JS提供了一種主動釋放對象內(nèi)存的方法(及對象無用后,自動刪除) ②刪除對象的屬性,delete 對象名.屬性名 5 對象是引用數(shù)據(jù)類型 也就是說,當new出一個對象是,這個obj變量存儲的實際上是對象的地址,在對象賦值時,負的也是地址 function Person(){} var zhangsan = new Person();//zhangsan對象實際存的是地址, var lisi = zhangsan // 實際上是吧zhangsan 的地址給了lisi lisi.name = "李四"//lis通過地址,修改了對象 console.log(zhangsan.name);//張三再通過地址打開對象,實際已經(jīng)變了 引用數(shù)據(jù)類型,賦值時,傳遞的是引用(地址)——快捷方式 基本數(shù)據(jù)類型,賦值時傳遞的是數(shù)據(jù)(值) 6、私有屬性與私有方法 在構(gòu)造函數(shù)中,通過var聲明的屬性。稱為私有屬性 function Person(){var num = 1;} 私有屬性的作用域,盡在當前函數(shù)有效,對外不公開,即通過對象/類都無法調(diào)用到。
?
function Person(name){ this.name = name;成員屬性 } Person.hei = 20;靜態(tài)屬性 var zhangsan = new Person("張三"); zhangsan.age= 24 成員屬性 delete zhangsan.name;刪除對象屬性 var lisi = zhangsan; lisi.name = "李四"; console.log(zahngsan); [this詳解] 1、誰最終調(diào)用函數(shù),this指向。 ①this指向的,永遠只可能是對象!!! ②this指向誰,永遠不取決與this寫在哪,而是取決于函數(shù)在哪調(diào)用 ③this指向的對象,我們稱之為函數(shù)的上下文context 也加函數(shù)的調(diào)用者 2、※※※※※this指向的規(guī)律(與函數(shù)調(diào)用的方式息息相關); this指向的情況,取決于函數(shù)調(diào)用的方式有哪些 ① 通過函數(shù)()直接調(diào)用:this指向window ② 通過對象.函數(shù)名()調(diào)用的,this指向這個對象 ③ 函數(shù)作為數(shù)組的一個元素通過數(shù)組下標調(diào)用的,this指向這個數(shù)組 ④ 函數(shù)做為window內(nèi)置函數(shù)的回調(diào)函數(shù)調(diào)用; this指向window ⑤ 函數(shù)作為構(gòu)造函數(shù),用new關鍵字調(diào)用時,this指向新new出的對象 function func1(){ //this[2]=10; console.log(this) } // ① 通過函數(shù)()直接調(diào)用:this指向window func1();//this--->window //② 通過對象.函數(shù)名()調(diào)用的,this指向這個對象 //狹義對象 var obj = { name:"obj", func1:func }; obj.func1();//this--->obj //廣義對象 document.getElementById("div").onclick = function(){ this.style.backgroundColor = "red" };//this——>div // ③ 函數(shù)作為數(shù)組的一個元素通過數(shù)組下標調(diào)用的,this指向這個數(shù)組 var arr = [func,1,2,3]; arr[0]();//this--->arr數(shù)組 //④ 函數(shù)做為window內(nèi)置函數(shù)的回調(diào)函數(shù)調(diào)用; this指向window setTimeout(func,1000);//this--->window //setInterval(func,1000); ⑤ 函數(shù)作為構(gòu)造函數(shù),用new關鍵字調(diào)用時,this指向新new出的對象 var obj = new func();//this--->>new出的新obj 綜合小練習 var obj1={ name:"obj1", arr:[setTimeout(func,3000),1,2,3] } document.getElementById("div").onclick = obj1.arr[0]; /符合規(guī)律⑤ 函數(shù)最終調(diào)用者 setTimeout this--->window var obj1={ name:"obj1", arr:[func,1,2,3] } document.getElementById("div").onclick = obj1.arr[0](); 符合規(guī)律③ 函數(shù)最終調(diào)用者 數(shù)組下標 this--->arr var obj1={ name:"obj1", arr:[{name:"arrobj",fun:func},1,2,3] } document.getElementById("div").onclick = obj1.arr[0].fun(); //函數(shù)最終調(diào)用者 {name:"arrobj",fun:func} 符合規(guī)律② this--->obj轉(zhuǎn)載于:https://www.cnblogs.com/LJYqq/p/6854174.html
總結(jié)
- 上一篇: 为什么Java中有多态?
- 下一篇: HDU 4850 Wow! Such S