面向对象基础(1)

什么是面向对象?

首先面向对象三大特性:抽象、封装、继承、(oop)

  抽象 :抽--把主要的特征、跟问题相关的特征抽出来。

  封装:看不到里面的东西,用好表面的功能就行了。

  继承:从父类上继承出一些方法和属性,子类,又有一些自己的特性(最大限度重用已有的代码)

             继承有多重继承和多态继承。

对象的组成:

  1. 方法:和函数类似,函数是自由的,但方法具有归属的对象,这两者都是过程量,是动态的;
  2. 属性:和变量类似,变量时自由的,但属性具有归属的对象,这两者都是状态量,是静态的

this: 当前的方法属于谁就指向谁;

var arr=[1,2,3];
        arr.a=12;
        arr.show=function(){
            alert(this.a);
        }
        arr.show();

//结果:12

构造函数:能构造一个对象的函数,功能与普通函数一样;

工厂方式:创建空白对象,加工对象,返回对象;缺点:创建时没有’new’,函数重复导致资源浪费;

new:通过new+构造函数来构造对象,

      加上new 系统会偷偷做两件事:1.创建一个空白对象。2.返回出这个对象

      可以理解为“new”会先通过系统在函数内部创建var this=new Object()这个对象,然后在最后的时候又自动返回return this这个对象。

原型(prototype):可以理解为css中的class, 能够同时给多个对象加方法;

类和对象:前者不具备实际功能,而后者具有,它们之间的关系就相当于模子和产品的关系;为了同时给多个对象加方法,那么就需要在类上面加原型,既可以给系统对象加也可以在创建的对象加;

原则:用构造函数加属性,用原型加方法。区别于工厂方式,这种方式叫做混合的构造函数/原型方式,简称混合方式构造对象;

对象命名规范:为了和系统对象保持一致,自己构造出来的对象命名时最好也保持首字母大写;

第一个面向对象的程序:

var obj=new Object(); //创建

obj.name="wy"; //属性
obj.qq="749996714";

obj.objName=function(){ //方法
alert("我的名字是" + this.name);    
}

obj.objQQ=function(){
alert("我的qq是" + this.qq);
}
obj.objName(); //调用
obj.objQQ();

  工厂方式:

function createPerson(name,qq){   //构造函数  --里面的功能是构造一个对象出来
            
            //原料
            var obj=new Object();  
            
            //加工
            obj.name=name;  
            obj.qq=qq;
            
            obj.objName=function(){  
                alert("我的名字是" + this.name);                
            }
            
            obj.objQQ=function(){
                alert("我的qq是" + this.qq);
            }
            
            //出厂
            return obj; 
        }
        
            var obj=createPerson("wy","749996714"); //调用
            
            obj.objName(); //调用
            obj.objQQ();
            
            var obj2=createPerson("hk","12345678") //调用
            
            obj2.objName(); //调用
            obj2.objQQ();

 解决工厂方式缺点:

function CreatePerson(name,qq){   //构造函数 
            this.name=name;  //不一样的 放在构造函数里
            this.qq=qq;                            
        }
        
        CreatePerson.prototype.objName=function(){ //一样的放在原型里
                alert("我的名字是" + this.name);                
            }
        CreatePerson.prototype.objQQ=function(){   //原型
            alert("我的qq是" + this.qq);
        }
                    
        var obj=new CreatePerson("wy","749996714"); 
        var obj2=new CreatePerson("hk","12345678") 
            
            obj.objName();
            obj2.objName();  

 

猜你喜欢

转载自www.cnblogs.com/sun927/p/9342330.html