面向对象编程(OOP)----BLUE大师JS课堂笔记(二)
一,把面向過程的程序改寫成面向對象的程序
1.前提 ? 所有的程序都在onload里面
2.改寫 ? 不能函數嵌套,可以全局變量
3.onload-------------------->構造函數
? 全局變量------------------->屬性
? 函數----------------------->方法
? 需要用到面向對象比較多的是游戲公司
4.改錯,重點是this
? this啥時候出問題呢?1.定時器 ? 但凡定時器中的this都是指的是window
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2.事件
? 解決這個方法 ? var _this=this;
? 然后通過閉包傳遞this
?
二,JSON更適合只生成一個JSON對象的情況
? ? ?命名空間:JSON里面套JSON
? ? ?var obj = {a:5,b:12,c:function(){
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? alert(this.a);
? ? ? ? ? ? ? ? ? ?},d:{e:function(){
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?alert(this.f);
? ? ? ? ? ? ? ? ? ? ? ? ?},f:34}};
?
三,繼承
在PHP中表現繼承的方式如下:
1 class Person{ 2 function __construct($name,$sex) 3 { 4 $this->name=$name; 5 $this->sex=$sex; 6 } //定義類的屬性 7 function showName() 8 { 9 echo $this->name; //定義類的showName方法 10 } 11 function showSex() 12 { 13 echo $this->sex; //定義類的showSex方法 14 } 15 } 16 17 class Worker extends Person{ 18 function __construct($name,$sex,$job) 19 { 20 parent::__construct($name,$sex); //調用Person構造 函數,繼承Person 21 } 22 }
在這個過程中,分為兩部,一,定義Person類的屬性和方法 ?二,定義worker類,并調用Person類(繼承)
?
JS中的繼承與這個過程類似:先執行父級的構造函數,然后再添加子類的屬性和方法
?
JS中的繼承的寫法:
1 function Person(name,sex) 2 { 3 this.name=name; 4 this.sex=sex; 5 } //定義構造函數 6 Person.prototype.showName=function() 7 { 8 alert(this.name); 9 }; //添加showName方法 10 Person.prototype.showSex=function() 11 { 12 alert(this.Sex); 13 }; //添加showSex方法 14 15 function Worker(name,sex,job) 16 { 17 Person.call(this,name,sex); //構造函數偽裝,把Worker實例偽裝成Person實例,來繼承Person的屬性 18 this.job=job; //單獨定義自己的屬性 19 } 20 21 Worker.prototype=Person.prototype; //把Person.prototype指針賦給Worker.prototype 22 23 Worker.prototype.showJob=function() 24 { 25 alert(this.job); 26 }; //定義自己的方法
call改變函數執行的this
在JS中全部對象都是引用,因此上面這段代碼中的21行Worker.prototype=Person.prototype;是引用的一個對象,當
Worker.prototype.showJob=function() { alert(this.job); };
給Worker.prototype.showJob時就相當于Person.prototype也有showJob方法了,這樣不好,把父級都給覆蓋了,因此為了解決這個問題要想辦法不要把對象引用要復制,通過下面這段代買就能很好地解決這個問題
for(var attr in Person.prototype) {Worker.prototype[attr]=Person.prototype[attr]; }
這樣就相當于把Person.prototype復制了一份給Worker.prototype,這樣給Worker.prototype加一個方法就不會影響到Person.prototype了。
而如果整站都需要作出改變,那只要修改父級就可以了,這樣會很方便,不容易出錯。
?
四,instanceof ? ? ...是...的實例
五,系統對象:1,本地對象(非靜態對象):需要實例,需要new ?-----------Object,Function,Array,String,Boolean,Number,RegExp,Error
? ? ? ? ? ? ? ? ? ? 2.內置對象(靜態對象): ? 不需要實例化,直接可以用,不需要new -------------global ? ? Math
? ? ? ? ? ? ? ? ? ? 3.宿主對象:BOM DOM
轉載于:https://www.cnblogs.com/ggbd-lie/archive/2012/11/22/2782651.html
總結
以上是生活随笔為你收集整理的面向对象编程(OOP)----BLUE大师JS课堂笔记(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 哥字开头的成语有哪些啊?
- 下一篇: C++Primer学习笔记(二)