//游戏开发之面向对象 //在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(); } }