js第四周笔记

js笔记
摘要由CSDN通过智能技术生成

一、*****Object面向对象

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

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

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

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

自有和共有
            自有:保存在对象本地的属性
            共有:保存在父(原型)对象的属性,所有的子对象都可以使用

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

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

                ②、修改和删除共有属性
                    修改:原型对象.属性名=新值;
                    删除: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;
                }
            }

            4)、*****判断x是不是数组?4种方法
                ①、判断x是不是继承自Array.prototype
                    Array.prototype.isPrototypeOf(x);
                    如果返回true,说明是数组,否则不是数组
                
                ②、判断x是否是由构造函数Array创建的
                    x instanceof Array

                ③、ES5提供了一个API:Array.isArray(x); - 此方法不是人人都有,而且ES5以上的东西,老IE都不支持(别怕,现在的开发流行趋势,不

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值