面向對象 一、編程範式: 1.命令式編程,2.聲明式 命令式編程的思想:面向過程,面向對象。聲明式的思想:DSL(領域特定語言) 命令式編程的定義:告訴電腦以什麼指令來執行代碼。註重中間過程。 聲明式的定義:告訴電腦想要什麼結果就讓電腦自己去執行。不需要關心過程。 面向過程:一步一步的向下執行 ...
面向對象 一、編程範式: 1.命令式編程,2.聲明式 命令式編程的思想:面向過程,面向對象。聲明式的思想:DSL(領域特定語言) 命令式編程的定義:告訴電腦以什麼指令來執行代碼。註重中間過程。 聲明式的定義:告訴電腦想要什麼結果就讓電腦自己去執行。不需要關心過程。 面向過程:一步一步的向下執行。 面向對象:看待任何東西,先看待特征、行為。(接近人的思維) 二、產生對象的方法: 1.基於類的面向對象 2.基於原型的面向對象 對象是類的實例,類是對象的抽象。類不是真實存在的。js中沒有的類的概念,js是通過原型面向對象。js是通過原型拷貝出來的。每一個對象都有一個原型,原型也是對象。 三、js中構建對象的方法: 1.字面量對象(json格式)例如: var stu={ name:"小明", age:20, learn:function(){console.log(this.name+"學習");} } 構造函數:構造對象,1>首字母大寫,用this,此時this指向對象。 var Student={ this.name:"小明", this.age:20, this.learn:function(){console.log(this.name+"學習");} } var xm=new Student("小明",20); //我們用new調用函數 xm.learn(); 同一構造函數構造的對象,它們的原型是一樣的, xm.constructor(構造函數本身) 四、為構造函數動態添加屬性: 1.在構造函數中添加屬性。 得到函數原型:1.Student.prototype.gender="男"; 2.xm.__proto__(指向各自原型) xm.__proto__ == Student.prototype(true) xm.__proto__和Student.prototype兩者的區別: 1>通過構造函數名,prototype可以讀也可以屬性。 對象.__proto__只可以讀不可以屬性。 2>prototype只能訪問在自身,不能向上訪問。__proto__可以向上追逐到向上的原型。 3.構造函數+原型: Student.prototype.learn=function(){console.log(this.name+"學習");} 屬性寫在構造函數中,方法寫在原型中。 var Student={ this.name=name, this.age=age, } 4.工廠方法 5.改進式構造函數+原型 在構造函數中用if(!Student._init){ Student.prototype.gender="男"; Student.prototype.learn=function(){console.log(this.name+"學習");} Student._init=true; //給對象——init賦值 } 五、垃圾回收器(GC) 定義:判斷對象是否被其他所引用,把沒有在引用的對象,有很大機率被關閉。(不斷迴圈) 缺點:自動管理,不能人為管理。 但是,js中,可以把不用的變數設為stu=null;那麼一個對象不能太大。 一旦垃圾回收器太忙,處理不過來,網頁等會就會卡住 ,一旦它空閑了,網頁就會恢復。 六、對象的運算符 1.new 2.delete(刪一個對象的屬性)。例如:delete xm.name. 如果刪原型的東西必須要原型里有。才能刪除。 七、對象的語句 1.with 例如: with(xm){console.log(name);} //xm是一個對象。 with對效率影響很大,不建議使用。 2.for..in(迴圈一個對象里的屬性) for(var k in xm){ console.log(xm[k]); //迴圈xm中的所有屬性。並列印中控制台 }