JS原型与构造函数

Posted yuyuanwen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS原型与构造函数相关的知识,希望对你有一定的参考价值。

面向对象(OOP): 

 

1. 什么是: 程序中都是先用对象来定义数据和功能,再按照逻辑的需要,访问对象中的数据和功能。

 

  2. 为什么: 和现实中人的想法非常接近。

 

  3. 什么是对象: 内存中同时存储多个数据和功能的存储空间

 

              描述现实中一个具体事物的属性和功能的程序结构

 

                     事物的属性,会成为对象中的属性

 

                     事物的功能,会成为对象中的方法

 

   何时: 今后开始写程序前,都要先用对象,描述好要操作的事物的属性和功能,再按需使用对象的功能,访问对象的属性

 

   如何: 面向对象三大特点: 封装,继承,多态

 

  封装:将一个具体事物的属性和功能集中定义在一个对象中    封装类/函数的属性 方法

 

  继承:子类拿父类的方法和属性

 

  原型和原型链:prototype

 

 

 

      创建自定义对象: ——封装   3种: 

 

         1. 使用对象直接量: 

 

              var obj={

 

                  属性名: 属性值,

 

                         ... : ... ,

 

                  方法名: function(){... this.属性名 ...},

 

                         ... : ... ,

 

              }

 

          强调: 对象自己的方法,要访问自己的属性,必须用this.属性名.

 

           this->正在调用函数的当前对象自己

 

 

 

       2. 使用new: 2步:  

 

          var obj=new Object(); //创建一个空对象

 

          //向空对象中添加属性和方法

 

          obj.属性名=属性值;

 

          obj.方法名=function(){...this.属性名...};

 

          

 

  var stu =new Object;

 

  var stu1 =Object( );

 

  var stu2 =new Object( );

 

  以上三种写法都对

 

     对象的本质: js中一切对象的底层都是关联数组

 

                        每个属性/方法都是关联数组中的元素

 

                        属性名/方法名是key,属性值/函数对象是value

 

 

 

      问题: 一次只能创建一个对象

 

       3. 解决: 用构造函数

 

          什么是构造函数: 专门描述一类对象统一结构的函数

 

          何时: 今后只要反复创建多个相同结构的对象时,都要先定义构造函数   

 

   构造函数的特点:

 

    a:构造函数的首字母必须大写,用来区分于普通函数

 

    b:内部使用的this对象,来指向即将要生成的实例对象

 

    c:使用New来生成实例对象

 

          为什么: 复用对象的结构代码

 

          如何: 2步: 

 

            1. 定义构造函数

 

                function 类型名(属性参数列表){

 

                     this.属性名=属性参数值;

 

                               ...=...;

 

                     this.方法名=function(){ ... this.属性名 ...  }

 

                }

 

this关键字:
          1、对象自己的方法,要访问自己的属性,必须用this.属性名
          2、引用正在调用函数的对象的关键词,就是.前面的对象
          3、方法中不加this的变量,默认仅在作用域链中找,不会去对象中查找    

 

            2. 用new调用构造函数,创建并装修新对象

 

                var obj=new 类型名(属性值列表);

 

                     创建一个指定“类型”的对象

 

                     用new调用指定"类型"的构造函数来创建对象

 

              new: 4件事: 

 

                1. 创建新的空对象

 

                2. 让新对象继承构造函数的原型对象

 

                3. 用新对象去调用构造函数

 

                      向新对象中添加构造函数规定的属性

 

                      将属性参数的值,保存到新对象的新属性中

 

                      向新对象中添加构造函数规定的方法

 

                4. 将新对象的地址保存在变量

 

 

 

      按需访问对象的属性,调用对象的方法:  

 

         访问对象的属性: obj.属性名   用法和普通的变量完全一样

 

                属性就是保存在对象中的一个变量

 

         调用对象的方法: obj.方法名() 用法和普通的函数完全一样

 

            强调: 方法中的this,默认指.前的对象

 

      构造函数的问题: 只能复用代码,不能节约内存

   JS中的继承

 

    继承: 父对象的成员,子对象不用重复创建,也可直接使用

 

      为什么: 即节约内存,又代码重用

 

      何时: 只要一类子对象,需要相同的属性或功能时,都要将相同的属性和功能仅在父对象中定义一次即可

 

      如何: 

 

        原型对象: 集中存储同一类型的子对象所需的所有共有属性和方法的父对  

 

  when:只要一类子对象共有得相同属性值和功能都要定义在原型对象中
       how:原型不需要手动创建,每创建一个构造函数,都会自动生成一个原型对象

 

 

 

 

以上是关于JS原型与构造函数的主要内容,如果未能解决你的问题,请参考以下文章

JS----构造函数与原型prototype 区别

JS面向对象——组合使用构造函数模型与原型模型

js_原型链的问题

js构造函数的方法与原型prototype

js 构造函数(construction)与原型(prototype)

JS原型与原型链详细解释