zoukankan      html  css  js  c++  java
  • 对象和构造函数

    .对象分类

                1.内建对象:

    - 由ES标准中定义的对象,在任意ES的实现中都可以使用

                  - 比如:Math String Number Boolean Function Object ...

    2.宿主对象:

                  - 由JS的运行环境提供的对象,目前来讲主要指浏览器提供的对象

                  - 比如:BOM DOM  (consol.log()  document.)

    3.自定义对象:

                  - 由开发人员自创建的对象         

    二. 对象语法

                法一:

         创建对象: var obj=new Object();

         添加对象: 对象.属性名=值;

             特殊:如果采用特殊属性名(比如数字),需要使用另一种方式:

                   对象[“特殊属性名”]=属性值;

                   且要怎么添加,读取就用什么格式使用

         修改属性: 跟添加对象一样

         删除属性: delete 对象.属性名;   

    法二:

      Var obj={

       属性名:属性值,

       属性名:属性值,

       ...

       属性名:属性值   (没有逗号了!!!)

    }; 

    三:判断属性是否在对象里面(in):

         语法:“属性名” in  obj;

         结果:如果在,返回true。 如果不在,返回false

                  

    对象深入

       一:工厂生产对象(用的不多):

             作用:就是生产对象快点,没有新的知识,就只是单纯函数和对象的结合使用

             思想:函数+对象

             步骤:创建一个传参(传对象的值些)函数

                   在函数中new一个对象,如果让对象中的值等于参数的值

                   函数返回这个对象

                    function creatPerson(name,age,sex){

                                         var obj=new Object();

                                         obj.name=name;

                                     obj.age=age;

                                     obj.sex=sex;

                                     return obj;

                                  }

                                    This

    来历:解析器在调用函数每次都会向函数内部传递一个隐形的参数,

          这个隐形的参数就是this,this指向一个对像

          这个对象我们称为函数执行的上下文对象

    代表什么:根据函数的调用方式的不同,this会指向不同的对象(有4种)

    1. 以函数的形式调用时,this永远都是window

      (因为使用函数,其实也是调用window的方法,this当然指向window,比如

     函数 fn,使用函数 fn()就等于 window.fn())

    1. 以方法的形式调用时,this就是调用方法的那个对象

       (其实第二种包括了第一种)

     

                               callapply

    1. 这俩个方法都是函数对象的方法,需要通过函数对象来调用

    比如:function Fna,b{}

    Fn.call(函数中this要指向的对象,函数参数1,参数2...

    Fn.apply(函数中this要指向的对象,函数参数以数组形式传【参数1,参数2)

                                Agrument

              -在调用函数时,浏览器1每次都会传递俩个隐含的参数

              -1.执行的上下文对象 this

              -2封装实参的对象 arguments

                 解释:

    1.arguments是一个类数组对象,他也可以通过索引来操作数据,也可以获取长度

            2.在调用函数时,我们所传递的实参都会在arguments中保存

            3.argumentsLength可以用来获取实参的长度

            4.即使不定义形参,也可以通过arguments来使用形参

                只不过比较麻烦

                -arguments[0]  第一个实参

      

             5.里边有一个属性叫做call

                这个属性对应一个函数对象,就是当前正在指向的函数对象

                        

               二:构造函数(函数首字母必须大写,这是对自己的规范!):

        1. 什么是构造函数:

            - 构造函数和普通函数没有区别,而区别就是调用方式的不同

            - 普通函数是直接调用,而构造函数需要使用new关键字来调用   

            - new对象,是从堆里面给出空间,赋值给变量的只是堆里面的地址,类似于指针

               

         2.构造函数的执行流程:

    1.立刻创建一个新的对象

    2.将新建的对象设置为函数中的this,在构造函数中可以使用this来引用新建的对象(创建的这个新对象,也就是this)

             3.逐行执行函数中的代码(比如alert(1)会立即执行)

             4.将新建的对象作为返回值返回

         3.使用instanceof可以检查一个对象是否是一个类的实例

            语法:                               

                 对象 instanceof 构造函数

                 儿子            父亲(或者跟高级的祖先,比如 Object)

                 先有构造函数,就是一个类,然后才能实例化对象

           比如: var per=new Person("孙悟空",18,"");   

    console.log(per instanceof Person);

             如果是,则返回true,否则返回false

        4.构造函数创建实例:

            function Person(name, age , gender){

                           this.name=name;  //this是不能少,因为没有this,就不能给对象添加属性,因为只有this才能指向当前创建的对象

                           this.age=age;

                           this.gender=gender;

                           this.sayName=function(){  //这里为了

                                alert(this.name);

      }

    }

    var per=new Person("孙悟空",18,"");

        原型

         1.来源:我们所创建的每一个函数,解析器都会向函数中添加一个属性prototype每个函数的原型都不一样,但是一个构造函数,无论new多少个,它的原型都一样,共享),这个属性对应着一个对象,征对象就是我们所谓的原型对象

          2.如果函数作为普通函数调用prototype没有任何作用,且每一个原型都不一样

          3.当函数通过构造函数调用时,它所创建的对象中都会有一个隐藏的属性——也指向该构造函数的原型对象,我们可以通过__proto__来访问该属性(对象)。

          4.每个构造函数的原型对象都一样(类似于公共区域)

          例如:构造函数原型: function fn(){};

                               var Fn=new fn();

                               Fn.__proto__ :这就是原型对象,是个对象哦,可以添加方法值哦

    1. 原型对象就相当于一个公共区域,所有同一个类都可以访问这个原型对象,

       我们可以将对象中共有的内容,统一设置到原型对象中。

       

    注:当我们访问对象中的一个属性或者方法时,它会先在对象自身中寻找,如果有则直接使用,如果没有,则会到原型对象中寻找,如果找到就直接使用。

      1. 所以共有属性,可以添加到原型对象中,因为可以不会影响到全局作用域
      2. 原型也有原型
  • 相关阅读:
    linux下对/sys/class/gpio中的gpio的控制
    -bash: ./reset_lgw.sh: /bin/sh^M: bad interpreter: No such file or directory
    MakeFile杂记
    MakeFile = := ?= += 的区别
    Linux 系统及编程相关知识总汇
    node-webkit开发桌面应用
    PHP 合理配置实现文件上传及保存文件到数据库
    PHP 从基础开始 ——重要知识点笔记
    Linux与Windows远程互访(使用Rdesktop与SSH)
    编程之路,开发之路,技术大全
  • 原文地址:https://www.cnblogs.com/zhangjiayimy/p/9965868.html
Copyright © 2011-2022 走看看