JavaScript第19天

1、Object对象

        1、概念:Array/String/RegExp/Date...对象具有属性和方法,都是预定义好的—js是基于原型的面向对象语言

        2、开发方式:

                1、面向过程:

                        开始—>结束,其实我们一致的开发方式都是面向过程:先干什么在干什么然后干什么

                2、面向对象:

                        对象(属性和方法),js有一句话叫做万物皆对象

                        如:假设一个人是对象:

                                属性:姓名、性别、年龄、身高、体重...

                                方法:吃饭、睡觉、跑步、上课、打字...

                3、何时使用面向对象:以后任何操作都要封装在一个对象之中—新手不推荐,难度很大

                4、为什么面向对象:现实生活中所有的数据都必须包含在一个事物之中才有意义

        3、封装/创建/定义

                封装自定义对象的3种方式:

                        1、直接量方式:

<script>
    var obj={
        "属性名":"属性值",
        ...,
        "方法名":function(){操作},//可以简化为箭头函数
        ...
    }
</script>

                                强调:

                                        1、其实属性名和方法的 "" 可以不加

                                        2、访问对象的属性和方法:

<script>
    obj.属性名;===obj["属性名"];
    obj.方法名();===obj["方法名"]();
</script>

                                        建议使用 . 去访问对象的属性和方法,更简单

                                        js中一切都是对象,除了undefined和null,一切对象的底层都是hash数组

                                        3、访问到不存在的属性,返回undefined

                                        4、可以随时随地的添加新的属性和新方法

<script>
    obj.属性名=新值;
    obj.方法名=function(){};
</script>

                                        5、希望遍历出对象所有的东西,必须使用for in,obj[i]才能拿到,不要使用 . ,会出问题

                                        6、如果希望在对象的方法里使用对象自己的属性,写为this.属性名

                                                1、单个元素绑定事件,this—>这个元素

                                                2、多个元素绑定事件,this—>当前元素

                                                3、定时器中的this—>window

                                                4、箭头函数this—>外部对象

                                                5、函数中this—>谁在调用此方法,this就是谁

                                                6、构造函数之中this—>当前正在创建的对象

                        2、预定义构造函数方式

<script>
    var obj=new Object();//空对象
    //需要自己后续添加属性和方法
    obj.属性名=新值;
    obj.方法名=function(){};
</script>

                                注意:以上两个都有一个缺陷:一次只能创建一个对象,第一种方法适合创建单个元素,第三种方法适合批量创建元素

                        3、自定义构造函数方式

                                1、创建自定义构造函数

<script>
    function 类名(name,age,hobby){
        this.name=name;
        this.age=age;
        this.hobby=hobby;
    }
        //千万不要再里面创建方法,每个对象都会创建出一个相同的方法,浪费内存—继承可以解决
</script>

                                2、调用构造函数创建对象

<script>
    var obj=new 类名(实参,...);
</script>

                        面向对象优缺点:

                                优点:

                                        1、所有的属性和方法都保存在一个对象之中—更符合现实更有意义

                                        2、每个功能特地分开写—有利于以后维护

                                        3、铁锁链舟—一个方法触发多个方法联动

                                缺点:对新手不友好,特别是this的指向问题

2、继承:父对象的成员(属性和方法),子对象可以直接使用

        为什么要继承:代码重用!提高代码的复用性,节约内存空间!提升网站性能!

        何时继承:只要多个子对象公用的属性和【方法】,都要集中定义在父对象之中

        1、如何找原型对象(父对象):保存一类子对象共有属性和共有方法

                1、对象名._proto_;

                        //必须现有一个对象

                2、构造函数名.prototype;

                        //构造函数名几乎人人都有,除了MathWindow,new 构造函数名
();

                        //Array、String、Date、RegExp、...

        2、两链一包:作用域链和【原型链】和闭包

                1、每个对象都有一个属性:_proto_,可以一层一层得找到每个人的父亲,形成链式结构,称之为原型链

                2、可以找到父对象的成员(属性和方法)

                        作用:找共有属性和共有方法

                3、最顶层的是Object的原型,上面放着一个toString方法,人人都可以使用toString

                4、JS万物皆对象

        3、有了原型对象可以设置共有属性和共有方法

                1、原型对象.属性名=属性值

                2、原型对象.方法名=function(){}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值