博客
关于我
脚本语言【JavaScript基础】JavaScript对象,函数上下文和构造函数
阅读量:236 次
发布时间:2019-03-01

本文共 4351 字,大约阅读时间需要 14 分钟。

文章目录

对象

  • JS中对象分为两种 js中对象可以通过点语法动态添加属性和方法。

    • 狭义对象

      • 用{ }表示;狭义对象可以拥有许多属性和方法

      • 右侧的属性值为function,则为方法。否侧称之为属性。

        var obj = {                 name:"小明",        age:18,        sex:"男",        eat:function(){                      console.log("我可以吃八斤米饭");        }   }; //检测当前对象类型 console.log(typeof obj); //获取属性值 console.log(obj.name); console.log(obj.age); console.log(obj.sex); console.log(obj.eat); //重新修改属性值 obj.name = "二哈"; obj.age = 2; obj.sex = "公"; //动态添加属性、方法 obj.color = "白加黑"; obj.yaoren = function(){               console.log("我可以咬人"); }obj.eat();//调用方法obj.yaoren();
    • 广义对象 如果是引用类型数据,且系统提供内置属性和方法的对象,称之为广义对象。

      • 函数

        • 有name、 length属性可以获取函数名和形参个数。

        • 函数也可以动态添加自定义属性

          var obj={                   name:'zdc',        age:18,        sex:'男',        eat:function(){                       console.log("我很能吃");        }    }    console.log(typeof obj)    function multi(a,b) {                   return a*b;    }    console.log(multi.name);    console.log(multi.length);    multi.age=19;    multi.sex='male';    console.log(multi.sex);
    • 数组

      • 属性 length 方法:join()、concat()、reverse()

      • 数组也可以动态的添加属性和方法

        //广义对象------数组var arr = ["吃饭",'睡觉','打豆豆'];console.log(arr.length);console.log(arr.reverse());console.log(arr.join());//动态添加属性和方法arr.xingming ="小红";arr.age = 18;arr.sex = "女";console.log(arr.xingming);
  • 在JS当中对象【狭义、广义】:可以通过点语法动态添加自定义属性、方法。

    狭义对象:其实狭义对象即为大花括号表示

    广义对象对象:广义对象除了自定义属性、方法意外,系统给它提供了内置属性和方法使用;

    大总结:其实在JS当中只要是引用类型数据即为对象

什么不是对象

  • 概述:在JS当中基本数据类型数值都不是对象:(如果不是对象不能通过点语法动态添加属性和方法)

    比如:数字、字符串、布尔值、未定义、空对象。

    NaN不是数据类型,它只是Number(数字类型中的一个特殊值)

函数上下文

  • 函数上下文即为this,只能在函数体中使用。所代表的数值不是固定的,取决于函数如何调用

  • 函数执行在JS当中有几种呀?(五种)

    • 函数名+小括号 ;

      • 函数名+小括号执行,函数体中上下文为window[即为BOM对象:浏览器对象]

      • //先认识BOM【browser object model】浏览器对象模型  //在模拟浏览器  //函数名+小括号执行,函数上下文即为BOM【内置window对象】  function fun (){               //这个this即为函数上下文      console.log(this);  }  //如果是函数名+小括号调用函数上下文为window【所谓BOM对象】  fun();
    • 函数作为事件处理函数执行

      • 函数作为事件处理函数执行,函数的上下文即为触发事件的当前标签

      • //获取div标签var div = 		   		  document.getElementById("box");//绑定单击事件div.onclick = function(){            //函数体中上下文   this.style.background = "red";}
    • 定时器回调函数执行

      • 在JavaScript语言当中,定时为回调函数回每隔一段时间执行一次,而定时器回调函数上下文为window;

      • //定时器回调函数每隔一段事件执行一次 //第一个参数:函数(称之为回调函数) //第二个参数:是一个数字(代表的是定时器间隔)单位MS setInterval(function(){              console.log(this); },1500)
    • 函数作为数组元素枚举出来执行

      • 函数作为数组元素枚举出来执行,函数的上下文为当前数组。

      • var arr = [1,2,3,4,5,function(){              console.log("我是数组里面函数----我执行了");     this.reverse();},6,7,8,9,10];//枚举出函数执行arr[5]();console.log(arr);
    • 函数作为对象方法执行

      • 函数作为狭义对象方法执行,谁最后打点函数的上下文即为谁。

      • //狭义对象  var jch = {               name:"贾成豪",      age:18,      sex:"男",      eat:function(){                   console.log(this.name+"我可以吃八级米饭");      }  }//调用对象方法jch.eat();
  • 总结:函数上下文五大规律

    1:函数名+小括号执行=>window

    2:函数作为事件处理函数执行=>当前触发这个事件标签

    3:定时器回调函数每隔一段事件执行=>window

    4:函数作为数组元素枚举出来执行=>当前数组

    5:函数作为狭义对象方法执行=>最后打点对象

认识关键字new

  • 关键字new其实也是调用函数另外一种方式。

  • /认知关键字new:它也是调用函数一种方式  //函数声明部分  function Fun (){        console.log("兄弟你执行呀");  }  //关键字new 也是调用函数一种手段  new Fun;  new Fun;  new Fun;

    被new调用的函数才叫做构造函数。

构造函数:(用new调用与用函数名.()调用的区别,)

  • 构造函数的两个特征

    • 构造函数的首个英文字母一般大写(不是必要的)

    • 如果函数是用new调用的,称之为构造函数。

    • function Fun (){        console.log(this);}new Fun;Fun();

​	两种方式调用,函数上下文是不一样的。用new调用时:- 第一步:在函数体中神秘创建了一个空的狭义对象【大的花括号】- 第二步:this指向当前这个空的狭义对象    - 第三步:可**以通过点语法给狭义对象动态添加属性、方法。**- 第四步:虽然没有关键字return,但是系统回自动将狭义对象返回 - ```javascript  function People(){       //第一步:在函数体中神秘创建了一个空的狭义对象【大的花括号】       //第二步:函数体种上下文指向当前这个空的狭义对象       //第三步:可以通过点语法给狭义对象动态添加属性、方法       this.xingming = "小明";       this.age = 18;       this.sex = "男";       this.hobby = ['吃饭','睡觉','打豆豆'];       //第四步:虽然没有关键字return,但是系统回自动将狭义对象返回      }     var obj = new People    ```  ```javascript  function Dog(name,sex,age){         this.name = name;         this.sex  = sex;//添加属性         this.age = age;  			this.getName = function () {          console.log(name);       };//添加方法        for(var i = 0 ; i < 10 ;i++){};        if(true){};      }      var erha =  new Dog("二哈","公",3);    ```  在前端工程师世界当中,构造函数就是所谓‘类’,通过四步走出来的狭义对象,称之为‘实例’。

原型链 prototype

  • 任意构造函数天生都有一个prototype属性,指向一个空的狭义对象

  • 例天生拥有一个__proto__属性,向上面的狭义对象借用方法使用

//任意构造函数 天生都有一个 prototype属性 ,指向一个空的狭义对象      //创建出来的时候天生拥有一个__proto__属性,可以向上面的狭义对象借用方法使用      function Dog(name,age,sex){            //经历四步走         this.name = name;         this.age = age;         this.sex  = sex;      }    //创建二哈实例      var erha = new Dog("二哈",18,"公");        var taidi = new Dog("太低",6,"母");​	erha.yaoren();​     taidi.yaoren()

转载地址:http://ahtv.baihongyu.com/

你可能感兴趣的文章
MySQLIntegrityConstraintViolationException异常处理
查看>>
mysqlreport分析工具详解
查看>>
MySQLSyntaxErrorException: Unknown error 1146和SQLSyntaxErrorException: Unknown error 1146
查看>>
Mysql_Postgresql中_geometry数据操作_st_astext_GeomFromEWKT函数_在java中转换geometry的16进制数据---PostgreSQL工作笔记007
查看>>
mysql_real_connect 参数注意
查看>>
mysql_secure_installation初始化数据库报Access denied
查看>>
MySQL_西安11月销售昨日未上架的产品_20161212
查看>>
Mysql——深入浅出InnoDB底层原理
查看>>
MySQL“被动”性能优化汇总
查看>>
MySQL、HBase 和 Elasticsearch:特点与区别详解
查看>>
MySQL、Redis高频面试题汇总
查看>>
MYSQL、SQL Server、Oracle数据库排序空值null问题及其解决办法
查看>>
mysql一个字段为空时使用另一个字段排序
查看>>
MySQL一个表A中多个字段关联了表B的ID,如何关联查询?
查看>>
MYSQL一直显示正在启动
查看>>
MySQL一站到底!华为首发MySQL进阶宝典,基础+优化+源码+架构+实战五飞
查看>>
MySQL万字总结!超详细!
查看>>
Mysql下载以及安装(新手入门,超详细)
查看>>
MySQL不会性能调优?看看这份清华架构师编写的MySQL性能优化手册吧
查看>>