JavaScript是基于对象编程的面向对象是一种编程思想

类和对象

  1. 类:我们善于将事物进行分类,类是一个抽象的概念。
  2. 对象:具体的事物。
    • 猫是一类
    • 楼下的大黄 —> 对象
  3. 类是对象的抽象,对象是类的具体事例。
  4. 类不占用内存,对象占用内存空间。

Object类型

  • Object对象,是所有JavaScript对象的超类(基类)。
  • Object.prototype(Object的原型)定义了JS对象的基本方法和属性。

声明对象(Object变量定义) 两种方法

  • 字面量声明 var obj = {};
  • new运算符 var obj = new Object();

对象类型的判断

  • console.log(typeof obj);

添加对象属性的方法

  1. 语法 :obj.id = “abc”;
  2. [ ]方括号语法: obj[“id”]= “abc”;

删除对象属性的方法

  • delete obj.id;
  • delete obj[“id”];

遍历对象

  • for in 循环
1
2
3
4
5
6
7
8
9
var obj = {
name:"zhangsan",
age:20,
}
for(var key in obj){
console.log(key,obj[key])
}
//name zhangsan
//age 20

检测对象有没有某个属性

1
2
if ("name" in obj)         (判断有)
if (obj.name === undefined)(判断没有)

Function类型

Function类型是JS中的引用类型之一,每个函数实际上都是Function类型的实例对象,具有自己的属性和方法。正因为函数式对象,所以函数名实际上也是一个指向函数对象的指针。

函数的定义方式

  1. 使用function关键字定义函数:(函数声明式)
1
2
3
function sum(a, b){
return a + b;
}
  1. 通过变量声明(表达式)定义函数:(函数表达式)
1
2
3
var sum = function (a, b){
return a + b;
}

函数的调用

  1. 通过函数名调用: sum();
  2. 事件绑定调用: obj.onclick = sum;
    注意:函数名仅仅保存指向函数对象的指针,隐藏函数名与包含对象指针的其他变量一样。也就是说,一个函数对象可以有多个名字。
1
2
3
4
5
6
7
8
9
10
11
如:function sum(a, b){
return a + b;
}
console.log( sum(5,10) ); // 15

// 变量sum2也指向了同一个函数对象
var sum2 = sum;// sum后面不加括号,不传参数。
console.log( sum2(3,5) ); // 8

sum = null;// sum对象不再保存函数对象的指针了
console.log( sum2(3,5) ); // sum2这个变量仍能继续使用

函数的重载

所谓重载,就是一组相同的函数名,有不同个数的参数,在使用时调用一个函数名,传入不同参数,根据你的参数个数,来决定使用不同的函数!但是JS中是没有重载的,因为后定义的函数会覆盖前面的同名函数。
在JS中,我们实现重载的常用方式有:

  1. 根据传入参数的不同类型进行重载;
  2. 利用参数中特殊的参数值进行重载;
  3. 根据参数的个数进行重载(最简单的方式:switch case 用法)

函数声明式,函数表达式与函数提升

  1. JS中的声明函数的方法有两种:函数声明式和函数表达式。

    两者区别如下:

    1. 函数声明式必须要有函数名,而函数表达式的函数名可选的。
    2. 函数声明式定义的函数可以在其声明之前被调用,而以函数表达式声明的函数只能在其后被调用
    3. 函数声明式定义的函数仅仅可以出现在全局中,或者嵌套在其他函数中不能出现在循环语句,条件语句和try/catch/finally中;而函数表达式可以在任何地方声明
  2. 函数提升

    函数提升,即:自动把函数的作用范围提升到全局中。而只有函数声明式才存在函数提升

函数内部属性:arguments, this

  1. arguments:用来存放传输参数的数组,可以被调用多次,每次数组都不一样。
  2. this谁调用函数,谁就是this。进行方法调用的时候函数前面是有window的,只是通常会省略掉。

函数的属性和方法

  1. length属性

    arguments对象的length属性表示实参个数,函数的length属性则表示形参个数。

  2. name属性:访问到给定函数指定的名字,即:跟在function关键字后的标识符。匿名函数的name属性为空

  3. prototype属性:是每个函数都有的属性,该属性指向一个对象的引用,这个对象称作原型对象(prototype object)。每一个函数都包含不同的原型对象。将函数用做构造函数时,新创建的对象会从原型对象中继承属性。

  4. apply()方法和call()方法:是每个函数都有的方法,等同于函数体内this对象的值。(后面讲解)

基本包装类型

为了便于操作基本类型的值,ECMAScript提供了3种特殊的引用类型:Boolean, Number, String。他们与其他引用类型的使用方法相似,同时也具有各自的基本类型的属性。实际上,每当读取一个基本类型的值,后台就会创建一个对应的基本包装类型的对象,从而可以调用对应的方法。

  1. Boolean类型:没有特定的属性和方法。
  2. Number类型:有静态属性,可以直接调用里面的属性和方法,无需new出来
  3. String类型:包含String对象属性,字符串方法,字符串操作方法,字符串位置方法等。

JS内置对象介绍

  1. String对象:字符串对象
  2. Array对象:数组对象
  3. Date对象:日期时间对象
  4. Boolean对象:布尔对象
  5. Number对象:数值对象
  6. Math对象:数学对象
  7. RegExp对象:正则对象