JavaScript第四周笔记

本文详细探讨了JavaScript中的对象面向对象概念,包括继承、原型和原型链的原理。介绍了如何获取和利用原型对象设置共有属性和方法,以及如何判断和操作自有与共有属性。此外,还讲解了ES5的新特性,如保护对象的四大特性、数组的新API,以及Object.create()方法。最后,简要提及了ES6的新语法,如模板字符串、let关键字和箭头函数。
摘要由CSDN通过智能技术生成

1、*****Object面向对象:


    1、*****继承:父对象的成员(属性和方法),子对象可以直接使用
          为什么继承:代码重用!节约内存空间
          何时继承:只要多个子对象公用的属性和【方法】,都要集中定义在父对象之中

    2、JS的面向对象是基于原型(爸爸)的
        什么是原型:保存一类子对象共有属性和共有【方法】的父对象(原型对象),每个对象天生就有一个原型
        1、*获取原型对象:2种
            1、对象名.__proto__; - 前提:必须先创建出一个对象,才可以使用此属性找到原型对象
            2、构造函数名.prototype; - 构造函数名:Array、Function、Date、RegExp、h52204...     - 哪怕没有创建过任何对象也能找到原型

        2、*****两链一包:
            作用域链:以函数EC的scope chain属性为起点,经过AO逐级引用,形成的一条链式结构,作用:查找变量的,带来了变量的使用规则:优先使用自己的,自己没有找全局,全局没有则报错
            闭包:保护了一个可以反复使用的局部变量的词法结构
            原型链:每个对象都有一个.__proto__的属性,可以不断的连续.找到爸爸-爷爷-祖祖...形成的一条链式结构
                          经过尝试,发现最顶层:Object.prototype是对象的原型,所有也就有了一句话:万物皆对象
                          作用:查找属性和方法,自己没有的属性和方法,可以自动顺着原型链进行查找,所以我们知道为什么人人都可以使用toString,因为toString在最顶层的

        3、获取到原型对象则可以设置共有属性和共有方法
            原型对象.属性名=属性值;//共有属性
            原型对象.方法名=function(){};//共有方法

        自有和共有
            自有:保存在对象本地的属性
            共有:保存在父(原型)对象的属性,所有的子对象都可以使用
        笔试题:
            1、*如何判断自有和共有
                判断自有:obj.hasOwnProperty("属性名");
                    返回一个布尔值:true说明是自有,false可能是共有也可能是没有
                判断共有:2个条件:
                    1、不是自有:obj.hasOwnProperty("属性名")==false;
                    2、自动在原型链检查:"属性名" in 对象名; 
                    if(obj.hasOwnProperty("属性名")==false&&"属性名" in 对象名){
                        //共有
                    }
                完整版:
                    if(obj.hasOwnProperty("属性名")){
                        console.log("自有");
                    }else{
                        if("属性名" in 对象名){
                            console.log("共有")
                        }else{
                            console.log("没有")
                        }
                    }

            2、*修改或删除属性
                1、修改和删除自有属性
                    修改:obj.属性名=新值;
                    删除:delete obj.属性名;

                1、修改和删除共有属性
                    修改:原型对象.属性名=新值;
                    删除:delete 原型对象.属性名;

            3、*****为老IE的数组添加indexOf方法 - 这道题不是固定的:为某一类人设置一个方法
            if(Array.prototype.indexOf===undefined){//我不希望主流浏览器也执行到这些代码,我只希望老IE执行到
                Array.prototype.indexOf=function(key,starti){//indexOf的执行原理
                    starti===undefined&&(starti=0);//说明用户没有传入开始位置,我们就给用户设置为从下标0开始查找
                    for(var i=starti;i<this.length;i++){//从开始位置处,循环数组后面的每一个文字和用户输入的关键字进行匹配
                        if(this[i]==key){
                            return i;//匹配到了返回对应的下标
                        }
                    }
                    //没匹配到,返回-1
                    return -1;
        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值