2021-11-29

十二、类和对象进阶2

1.自执行方法

定义一个自执行函数,函数定义完成后,自己执行一次,函数名可以省略,因为没有任何意义

注意:要以分号结束,否则可能会影响后面的语句。

(function sayHello() {

    console.log('sayHello');

})();

自执行函数的简写形式

+ function sayYes() {

    console.log('sayYes');

}();

自执行函数,也可以直接定义成箭头函数

(()=>{

    console.log('aaa');

})()

   

   

   

    自执行函数

   

2.rest参数

// ...args 就是rest参数

function fun1(a,b,c,...args){

    console.log(a,b,c);

    // arguments 是一个类数组对象,结构长得像数组,其实是一个object对象

    console.log(arguments);

    // rest参数 是一个数组对象,既然是数组,就可以直接使用数组的方法。

    console.log(args);

}

   

   

   

    rest参数

   

3.展开运算符

展开运算符就是...,可以将一个数组全部展开

let arr3 = [...arr1,...arr2]

展开运算符,可以展开对象的全部成员,也可以将一个对象的成员,克隆给另一个对象

let lh2 = {...lh}

展开运算符,可以将多个对象的成员,合并到一个大的对象中,后面对象中的成员,如果跟前面对象中的成员同名,会覆盖前面的

let lxt = {...lh,...gxt}

   

   

   

    展开运算符

   

4.解构赋值

ES6中的解构赋值语句,可以直接将数组中的每个元素提取出来

方式是:let [变量名1,变量名2,...] = 数组

ES6中的解构赋值语句,可以直接将对象中的每个元素提取出来

方式是:let {name,age,gender,job} = obj

通常情况下,对象的属性名称叫什么,就定义什么名称的变量去接,如果出现了同名,可以修改名称

方式是:let {name,age:age1,gender,job} = obj

在ES6中,定义对象时,属性的左右两边的表达式相同时,可以省略右边的表达式,该对象在定义的时候,会自动往父级作用域寻找同名属性名对应的值

   

   

   

    解构赋值

   

5.值类型和引用类型

在js中,number,string,boolean,都是值类型,值类型的变量,直接将数据保存到内存的栈空间中。值类型的变量,在传递时,传的是副本。

在js中,对象,数组,都是引用类型,引用类型的变量,将数据保存在堆中,然后将堆的地址保存到栈中。

   

   

   

    值类型和引用类型

   

6.原型对象

prototype属性是类的原型对象。通常情况下,我们习惯将类的方法,定义到类的原型对象中,这样做的好处是,提高代码的利用率,不会开辟多余的内存空间。

__proto__属性是对象的原型对象,注意:同种类型多个对象上的原型对象 共同指向类型上的原型对象。类的原型对象上面的方法,类的对象,可以直接调用

   

   

   

    原型对象

   

7.ES6中定义类的新语法

// 定义一个Person类型

class Person{

    // 构造函数

    constructor(name,age,gender){

        this.name = name,

        this.age = age

        this.gender = gender

    }

    // 给类添加一个方法

    sayHi = function(){

        console.log(this.name,this.age,this.gender);

    }

    //用这种方式定义的方法,是将方法定义的类的原型对象中去

    sayHello(){

        console.log('hello!');

    }

}

8.继承

   

   

   

    Document

   

你可能感兴趣的:(2021-11-29)