每天任务完成表
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
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)增强的模块模式
- 看网课(条件语句补充,初始引用值,函数,初始作用域)