//遊戲開發之面向對象 //在js的開發模式中有兩種模式:函數式+面向對象 //1.es5 // 拓展一:函數的申明和表達式之間的區別 // 函數的申明: // function funA(){ // // } // 表達式的寫法:(推薦) // let funB=function(){ // // } // 區別在於表達式的寫法是會變量的提高!在執行的時候會要去合適的判斷才執行 // callback&&callback() // (function () { // //所要執行的...... // })() // 1.最簡單的建立對象的:(單一) // var obj=new Object(); // var obj={} // // obj.name="xie"; // obj.age=21; // obj.say=function(){ // console.log(this.name+this.age); // } // 2.工廠化構造函數建立(擁有共同的方法) var Animal=function(name,age) { this.name=name; this.age=age; this.say=function(){ console.log(this.name+" "+this.age); } } //原型鏈對象 實例共享屬性 Animal.prototype.say=function(){ console.log(this.name+""+this.age); } var cat=new Animal("小狗","3") cat.say(); // 方法被其餘對象執行 var params={ name:'小貓', age:4, } //cat的say方法被params這個對象調用,而且採用params的參數 apply:方法能劫持另一個對象的方法,繼承另一個對象的屬性. Function.apply(obj,args)方法能接收兩個參數 obj:這個對象將代替Function類裏this對象 args:這個是數組,它將做爲參數傳給Function(args-->arguments) /*定義一我的類*/ 3 function Person(name,age) 4 { 5 this.name=name; 6 this.age=age; 7 } 8 /*定義一個學生類*/ 9 functionStudent(name,age,grade) 10 { 11 Person.apply(this,arguments); 12 this.grade=grade; 13 } 14 //建立一個學生類 15 var student=new Student("qian",21,"一年級"); 16 //測試 call示例 在Studen函數裏面能夠將apply中修改爲以下: Person.call(this,name,age); cat.say.apply(params) ES6: class Animal{ constructor(name="",age=1){ this.name=name; this.age=age; } say(){ console.log(this.name+this.age); } } class Cat extends Animal{ constructor(name,age){ super(name,age); } //覆蓋父類的方法 say(){ //想要執行父類的方法 super.say(); } }