首页 > 代码库 > 《JS中的面向对象技术》

《JS中的面向对象技术》

内容要点:

   1.什么是对象:JS权威指南学习总结-第六章 ,(有句话:一切都是对象)

   2.什么面向对象

        使用对象时,只关注对象提供的功能,不关注其内部细节,比如jQuery。面向对象是一种通用思想,并非只有编程中使用,任何事情都可以用。

  3.JS中面向对象三大特征: 封装、继承、多态

  4.JS自定义对象(三大对象两大属性):

        4.1创建对象方式:方法1:对象初始化的方法,就是通过对象直接量创建的对象。方法2:通过关键字new和构造函数的方法创建对象

        4.2对象属性定义:私有属性、对象属性、类属性

        4.3对象方法定义:私有方法、对象方法、类方法

        4.1创建对象的两种方法:

               方法1:对象初始化的方法,就是通过对象直接量创建的对象。方法2:通过关键字new和构造函数的方法创建对象

               方法1:通过对象初始化的方法创建对象:

               var person={

                      name:"xingoo",  //对象的属性

                      age:26,

                      //对象的方法:如果函数挂载在一个对象上,作为对象的一个属性,就称它为对象的方法

                      say:function(){ console.log("say something"); },

                      //当通过这个对象来调用函数时,该对象就是此次调用的上下文,也就是该函数的this的值。

                      action:function(){ console.log("do something"); 

                       }                                                                 

                      };

                      console.log(person.name); //xinggo

        console.log(person.age); //26

        person.say();//say something

          person.action(); //do something

             方法二.通过构造函数创建对象:

                   function student(name,age){      //用于初始化一个新创建的对象的函数称为构造函数
                          this.name = name;
                     this.age = age;
                     this.say = function(){
                         console.log("say something");
                                           }
                            this.action = function(){
                                   console.log("do something");
                                  }
                            }
                    var xingoo = new student("xingoo",27);  //关键字new做了两件事情:帮助创建一个空白对象,并返回了这个对象
                console.log(xingoo.name); //xingoo
                console.log(xingoo.age); //27
                xingoo.say(); //say something
                xingoo.action(); //do something

         4.2对象的属性:私有属性、对象属性、类属性;

               对象属性需要创建对象后才能使用;

           私有属性在内部可以直接使用,在外部需要通过闭包才能使用。

 

           类属性可以通过对象名称直接使用。

               function func(){

        this.objPro1 = "对象属性";

        func.prototype.objPro2 = "对象属性";

        var privatePro = "私有属性";

        }

        func.classPro = "类属性";

        console.log(func.classPro); //类属性

        var f = new func();

        console.log(f.objPro1);//对象属性

        console.log(f.objPro2);//对象属性

        <!-- 私有属性可以通过闭包获取 -->

          4.3对象的方法:私有方法、对象方法、类方法

               function demoFunc1(){

        var privateFunc = function(){ console.log("this is privateFunc"); }; //私有方法

        privateFunc();

        this.objFunc1 = function(){ console.log("this is objFunc1"); };//对象方法

        demoFunc1.prototype.objFunc2 = function(){ console.log("this is objFunc2"); };

                      }

        demoFunc1.classFunc = function(){ console.log("this is classFunc"); };//类方法

        demoFunc1.classFunc(); //this is classFunc

        var f = new demoFunc1();//this is privateFunc

        f.objFunc1();//this is objFunc1

        f.objFunc2();//this is objFunc2

 5.JS中面向对象三大特征: 封装、继承、多态

     封装:不考虑内部实现,只考虑功能使用

    继承:从已有的对象上继承出新的对象。注:apply()实现属性和方法的继承(8.7函数的方法),prototype实现原型的继承

    多态:子类的方法会覆盖父类的方法,即表现出多态性。

    继承特性:  

       function Animal(name,age){

      this.name = name;

      this.age =age;

      this.say = function(){ console.log("animal say something"); }

    }

   function Cat(name,age){

      Animal.apply(this,[name,age]);

    }

      <!-- Cat.prototype = new Animal();-->

      var cat1 = new Cat("xingoo",3);

      console.log(cat1.name);//xingoo

      console.log(cat1.age); //3

      cat1.say(); //animal say something

 

                 console.log(Cat.prototype); //原型是:Cat{},_proto_:Cat

       如果开启注释的部分,可以发现,cat类的原型也变成了Animal。

    多态特性:

       子类的方法会覆盖父类的方法,即表现出多态性;注,在面向对象编程中,类B可以继承自另外一个类A,我们将A称为父类,将B称为子类。

       function Pig(name,age){

      this.say = function(){ console.log("i am pig"); }

    }

   Pig.prototype = new Animal();

   function Dog(name,age){

      this.say = function(){ console.log("i am dog"); }

    }

   Dog.prototype = new Animal();

  function say(animal){

      if(animal instanceof Animal){ animal.say(); }

    }

    var dog = new Dog();

    var pig = new Pig();

    say(dog); //i am dog

    say(pig); //i am Pig

 

《JS中的面向对象技术》