类和对象&es5新增方法

事物分为抽象的事物具体的事物:抽象事物是泛指的;而具体事物是特指的

面向对象的思维特点:1.抽取(抽象)对象共用的属性和行为组织(封装)成一个类(模板);2.对类进行实例化,获取类的对象

对象:在JavaScript中,对象是一组无序的相关属性和方法的集合,所有的事物都是对象,例如字符串、数值、数组、函数等

对象是由属性方法构成的:

    属性:事物的特征,在对象中用属性来表示(常用名词)

    方法:事物的行为,在对象中用方法来表示(常用动词)

类class:用来声明一个类,之后以这个类来实例化对象

    类抽象了对象的公共部分,它泛指某一个大类(class)

扫描二维码关注公众号,回复: 14738221 查看本文章

    对象特指某一个,通过实例化一个具体的对象

创建类

    语法:class name{//class body}   name的首字母大写

    创建实例:var xx=new name();    注意:类必须使用new实例化对象

类constructor()方法:是类的构造函数(默认方法),用于传递参数,返回实例化对象,通过new命令生成对象实例时,自动调用该方法,如果没有显示定义,类内部会自动给我们创建一个constructor()

    class 类名{

        constructor(参数1,参数2……){

        //函数体

        }

        方法名(){

        //内容

        }

    }

    var name=new 类名();

注意:constructor()里面装的是属性,而不用装方法

类的继承

    语法:class Father{}//父类

        class Son extends Father{}//子类继承父类

    super关键字:用于访问和调用对象父类上的函数,可以调用父类的构造函数,也可以调用父类的普通函数

    继承中,如果实例化子类输出一个方法,先看子类当中有没有这个方法,如果有就先执行子类的。如果没有,就去父类中找,如果父类中有,就用父类的方法(就近原则)

    子类在构造函数中使用super,必须放到this前面(必须先调用父类的构造方法,再使用子类的构造方法)

    注意点:1.在es6中,类没有变量提升,所以必须先定义类,才能通过类实例化对象;2.类里面的共有的属性和方法一定要加this使用

构造函数:构造函数中可以添加一些成员,可以在构造函数本身上添加,也可以在构造函数内部的this上添加。通过这两种方法添加的成员,就分别称为静态成员动态成员

    实例成员就是构造函数内部通过this添加的成员  实例成员只能通过实例化的对象来访问,不可以通过构造函数来访问

    动态成员:在构造函数内部创建的对象  只能由实例化的对象来访问

    静态成员:在构造函数本身上添加的成员  只能由构造函数本身来访问

    构造函数很好用,但是存在浪费内存空间的问题,因为对象里面的方法是复杂数据类型,会创建一个新的内存空间来储存

构造函数原型prototype

    构造函数通过原型分配的函数是所有对象所共享的

    js规定,每一个构造函数都有一个prototype属性,指向另一个对象。注意这个prototype就是一个对象,这个对象的所有属性和方法,都会被构造函数所拥有

    我们可以把那些不变的方法,直接定义在prototype对象上,这样所有对象的实例就可以共享这些方法

    原型是一个对象,它的作用是共享方法

    一般情况下,公共的属性定义到构造函数里面,公共的方法放在原型对象身上

对象原型__proto__

    对象都会有一个属性__proto__指向构造函数的prototype原型对象,之所以我们对象可以使用构造函数prototype原型对象的属性和方法,就是因为对象有__proto__原型的存在

(1)构造函数有原型对象prototype;

(2)构造函数原型对象prototype里面有constructor指向够构造函数本身;

(3)构造函数可以通过原型对象添加方法;

(4)构造函数创建的实例对象有__proto__原型指向 构造函数的原型对象

原型对象this指向:1>在构造函数中,里面的this指向的是对象实例;2>原型对象函数里面的this指向的是实例对象

原型链:

扩展内置对象:可以通过原型对象,对原来的内置对象进行扩展自定义的方法,比如数组增加自定义求偶数和的功能

    注意:数组和字符串内置对象不能给原型对象覆盖操作 Array.prototype={},只能是Array.prototype.xxx=function(){}的方式

继承

    (1)call():调用这个函数,并且修改函数运行时this的指向

    fun.call(thisArg,arg1,arg2……)

    thisArg:当前调用函数this的指向对象     arg1,arg2:传递的其他参数

    (2)借用构造函数继承父亲类型属性

        核心原理:通过call()把父类型的this指向子类型的this,这样就可以实现子类型继承父类型的属性

类的本质:class的本质还是function

ES5新增方法

    1>数组方法:

        迭代(遍历)方法:forEach()、map()、filetr()、some()、every();

    array.forEach(function(currentValue,index,array){})

        currentValue:数组当前项的值

        index:数组当前项的索引

        arr:数组对象本身

     array.filter(function(currentValue,index,array){})

        filter()方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素,主要用于筛选数组

        注意它直接返回一个新数组

        currentValue:数组当前项的值

        index:数组当前项的索引

        arr:数组对象本身

   

     array.some(function(currentValue,index,array){})

        用于检测数组中的元素是否有满足条件的对象

        注意它返回的是一个布尔值,如果查找到这个元素,就返回true;如果没有,就返回false

        如果找到第一个满足条件的元素,则终止循环,不再查找

        currentValue:数组当前项的值

        index:数组当前项的索引

        arr:数组对象本身

对象方法

    Object.defineProperty()定义对象中新属性或修改原有的属性

    Object.defineProperty(obj,prop,descriptor)

        obj:必需,目标对象

        prop:必需,需定义或修改的属性的名字  字符串的形式

        descriptor:必需,目标属性所拥有的特性:以对象的形式{}书写

            value:设置属性的值,默认为undefined

            writable:值是否可以重写。true|false 默认是false

            enumerable:目标属性是否可以被枚举。true|false 默认是false  false不允许遍历

            configurable:目标属性是否可以被删除或是否可以再次修改特性。true|false 默认是false  false不允许再修改里面的特性

猜你喜欢

转载自blog.csdn.net/qq_48491815/article/details/125989290
今日推荐