js 的变量、作用域、内存问题;引用类型和面向对象的程序设计;继承;函数表达式的总结(红宝书五六七章重点总结)

每天任务完成表

7.22~7.23

  • 红宝书的第四章,第五章
    -(变量、作用域、内存问题;引用类型)
1.object类型中的各个函数需要注意,比如常用的tostring(),valueOf()等
2.typeof的用法,确定一个变量是字符串,数值,布尔值,undefined的工具。
(当遇到变量的值是一个null或者对象时,利用instanceof操作符,详情见72页)
3.引用详述---object类型
    (1)创建实例方法
        a.var preson = new object();
        b.var person = {
            name = "mike",
            age = 29 };
    (2)访问对象属性
        a.点表示法
        b.方括号表示法(可以使用变量访问属性以及有空格的的时候)
4.引用详述---Array类型
    (1基本的创建方法
        a.var color = new(可省略) Array(20);
        b.数组字面量表示法(不推荐使用)
    (2)检测数组
        a.instanceof
            (if(value instanceof Array))
        b.Array.isArray()
            (if(Array.isArray(value))
    (3)转换方法
        a.数组继承的toLocaleString(),tostring(),valueOf()都会以逗号分隔的形式返回数组项
        b.使用join(),改变分隔符
            (alert(color.join("||")
    (4)栈方法(后进先出)
        a.push():接收任意数量的参数,添加到数组末尾,返回修改后数组的长度
        b.pop():从数组末尾移除最后一项,改变数组的length的值,饭后移除的项。
    (5)队列方法(先进先出)
        a.shift():移除数组中的第一项并返回该项。
        b.unshift():在数组前端添加任意各项并返回数组的长度
    (6)重排列方法
        a.reverse():反转顺序,返回值是经过排序后的数组
        b.sort()单个使用时会有瑕疵,所以它可以接受一个比较函数作为参数,返回值为排序后的数组
            function com(a,b) {
                if(a<b){
                    return 1;
                }else if(a>b){
                    return -1;
                }else{
                    return 0;
                }
            }
            var values=[0,1,5,10,15];
            values.sort(com);
            alert(values);
    (7)操作方法
        a.创建新数组
            *concat():基于当前数组的所有项创建
            *slice():基于当前数组的一或多项创建,注意参数,详见94页。
        b.splice()方法
            *删除 splice(0,2)数组前两项
            *插入 splice(2,0,"b","c")从数组第二项开始不删除,插入b,c
            *替换 splice(2,1,"b","c")
    (8)位置方法
        a.indexOf():从前往后
        b.lastIndexOf():从后往前
    (9)迭代方法(对数组的每一项运行给定函数,详情见96页)
        a.every():若该函数对每一项都返回true,则返回ture
        b.filter():返回该函数返回true的项的数组
        c.forEach():没有返回值
        d.map():返回每次函数调用的结果组成的数组
        e.some():若该函数对任意一项返回true,则返回true
    (10)归并方法
        a.reduce():从第一项开始,逐个遍历到最后
        b.reduceRight():从最后一项开始,向前遍历到第一项
5.引用详述---data类型
    (1)创建日起对象
        a.不传参的时候,自动获取当前日期与时间
        b.若要用特定的日期,有两种方法
            *Date.parse(),接收一个表示日期的的字符串参数,返回日期毫秒数。
            var data = new Date(Date.parse("may 25,2001")
            *Date.UTC(),返回日期毫秒数。
             var y2k = new Date(Date.UTC(2005,4,5,17,55,55)GMT时间2005年5月5号下午5:55:55
     (2)继承的方法
 6.RegExp类型(看得不是很清楚,等先过完这章,重新看一下。
       
        
        
  • 看了实例索引的第一个:控制div属性(作为正规的类型,代码规范度非常的高,需要学习!)
    1.在js中的弹出框可以用模态框代替
  • 学习css权权威指南的第五章字体的美化
  • 复习bootstrap的栅格属性以及移动设备优先

7.24

  • 红宝书的5.6以及剩下的第五章内容
1.基本包装类型
    (1)注意与引用类型的区别:对象的生存期
    (2)Boolean:不推荐使用
    (3)Number类型:
        a.toFixed():按照指定的小数位返回数值的字符串表示
        b.toExponential();返回以指数表示法表示的数值的字符串表示
    (4)string类型:
        a.字符方法:
            *charAt():以单字符字符串的形式返回给定位置的那个字符
            *charCodeAt():返回该字符的编码
            *方括号加数字来访问指定的字符
        b.字符串方法:
            *concat():拼接字符串,“+”更简单
            *slice(),substr(),substring()都是用来基于子字符串创建新字符串的方法,参数可一可二,具体见123页
        c.字符串位置方法(返回的都是位置)
            *indexOf():从前往后
            *lastindexOf():从后往前
        d.trim方法:创建一个字符串副本,删除前置后缀所有空格,返回结果
        e.字符串大小写转换方法
            *toLocaleLowerCase()
            *toLocaleUpperCase()
        f.字符串的模式匹配方法:
            *match():
            *search():
            *replacde():
            *split():
        h.localecompare()方法:
        i.fromCharCode()方法:接收一或多个字符编码,转换成字符串
2.单体内置对象
    (1)Global对象
        a.URI编码方法
            *encodeURI():用于整个URI,不会对本身属于特殊字符的进行编码
            *decodeURI()与上面的对应,解码
            *encodeURIcomponent():用于URI中的一段,会对任何非标准字符进行编码
            *decodeURIcomponent()与上面对应,解码
        b.eval()方法
        C.Global对象的属性
            *133页
        d.window对象
    (2)Math对象
        a.Math对象的属性
        b.min()与max()方法
        c.舍入方法
            *Math.ceil()向上舍入
            *Math.round()四舍五入
            *Math.floor()向下舍入
        d.random()方法
            返回大于等于0小于1的一个随机数
        e.其他方法见137页

7.25

  • 做了c primer的第六章章末检测题
  • 红宝书第六章 面向对象的程序设计
1.理解对象
   (1)属性特征
       a.数据属性
           *4个特性
           *注意Object.defineProperty()方法修改属性默认特征
       b.访问器属性
           *包含一对getter函数和setter函数
           *4个特性,与数据属性有两个一样的
           *定义访问器属性:注意Object.defineProperty()方法;;两个非标准方法,详见142页
   (2)定义多个属性
       使用Object.defineProperties()方法,两个参数(对象,属性)
   (3)读取属性的特征
       使用Object.getOwnPropertyDescriptor(),两个参数(对象,属性)
2.创建对象
   (1)工厂模式
       用函数来封装以特定借口创建对象的细节来创建多个相似的对象,但是却不能解决对象识别。
   (2)构造函数模式
       a.将构造函数当做函数
           注意new的用法,只要用new操作符来调用,它就可以作为构造函数
       b.构造函数的问题
           会导致作用域链和标识符解析,解决办法:把函数定义转移到构造函数外部来解决,可是依旧存在其他的问题
   (3)原型模式
       a.理解原型对象
           *prototype属性:指向函数的原型对象,一般,所有的原型对象都会获取一个constructor属性,指向prototype属性所在函数的指针
           *isPrototype()方法来确定对象之间是否存在这个关系
           *Object.getPrototypeOf()方法返回Prototype的值
           *可以通过对象实例访问保存在原型中的值,却不能修改
           *当为对象添加一个属性时,这个属性就会屏蔽掉原型对象中保存的同名属性,不会改变原型找那个的值
           *可以使用delete来删除实例属性,从而可以重新访问原型属性
           *hasOwnProperty()检测一个属性是否存在于实例中,还是在原型中,当在实例中时才会返回true。
       b.原型与in操作符
           *in操作符单独使用时,无论属性存在与实例中还是原型中,只要通过对象能够访问给定属性时就会返回true
           *for-in循环中返回的是能够通过对象访问的,可枚举的属性,详见153页。
       c.更简单的原型语法
           *以对象字面量形式创建的新对象(注意constructor已经无法确定对象类型 了
       d.原型的动态性
           *156页具体事例
       e.原生对象的原型
       f.原型对象的问题

7.26

  • 完善自己写的登录注册界面并完成,发给学姐,继续写导航栏,js与HTML还是链接有问题,还在改。
  • 找到了网课资源准备放慢自己自学的进度,跟着网课,把基础学的扎实点。今天在看运算符。
  • 请了半天的假,浪费了不少时间,耽误了进度。

7.27

  • 学习红宝书的第六章第二节创建对象和第三节继承
2.创建对象
    (4)组合使用构造函数模式和原型模式
        构造函数模式用于定义实例属性,而原型模式用于定义方法与共享的属性
    (5)动态原型模式
    (6)寄生构造原型模式
    (7)稳妥构造函数模式
        安全性比较高
3.继承
    (1)原型链(利用原型让一个引用类型继承另一个引用类型的属性和方法
        a.别忘记默认的原型
        b.确认原型与实例的关系
            *使用instance操作符,测试实例与原型链中出现过的构造函数,结果就会返回true,
            *使用isPrototypeOf()方法,只要是原型链中出现的原型,都可以说是该原生链所派生的实例的原型,结果会返回true.
        c.谨慎的定义方法
        *给原型添加方法的代码一定放在替换原型的语句后
        *注意:不能使用对象字面量创建的原型方法,因为这样会重写原型链
        *166页关于定义的方法
        d.原型链的问题:
            *包含引用类型值的原型
            *在创建子类型的实例时,不能像超类型的构造函数中传递参数
    (2)借用构造函数(解决原型中包含引用类型值所带来的的问题,思想为:在子类型构造函数的内部调用超类型构造函数)
        a.传递参数
        b.借用构造函数的问题
    (3)组合继承
        a伪经典继承:将原型链与借用构造函数的方法组合在一起)
        b.思路:使用原型链实现对原型属性与方法的继承,通过借用构造函数实现对实例属性的继承
    (4)原型式继承
    (5)寄生式继承
    (6)寄生组合式继承
  • 看网课条件语句与循环语句
  • 继续完善自己的代码,终于没有简单的问题了,还有弹出框写了,自己的任务基本完成了就看后续有没有问题

7.28

  • 第七章函数表达式
1.递归
    (1)argument.callee()可以实现递归,这是一个指向正在执行的函数的指针。
    (2)也可以通过命名函数表达式来解决
    
2.闭包(有权访问另一个函数作用域中变量的函数,重点理解179与180页的例子
    (1)闭包与变量
    (2)关于this对象
    (3) 内存泄漏
3.模仿块级作用域
    (function(){
        //这里是块级作用域
    })();
    另一种:
    var someFunction = function(){
        //这里是块级作用域
    };
    someFunction();调用该函数
4.私有变量
    特权方法:有权访问私有变量私有函数的公有方法,创建方式一:在构造函数中定义特权方法
    (1)静态私有变量(通过在私有作用域中定义私有变量或者函数来创建特权方法)
    这种方法与在构造函数中定义特权方法的主要区别是:私有变量和函数是由实例共享的。
    由于特权方法是在原型上定义的,因此所有实例都使用同一个函数,并且作为闭包,总保存着对包含作用域的引用。
    (2)模块模式(为单例创建私有变量和特权,只有一个实例的对象就叫做单例)
    (3)增强的模块模式
  • 看网课(条件语句补充,初始引用值,函数,初始作用域)
发布了57 篇原创文章 · 获赞 22 · 访问量 7286

猜你喜欢

转载自blog.csdn.net/qq_39897978/article/details/98587244