一个大四求职菜鸟的前端学习之路(三)

       求职告一段落了,虽然不是继续做前端开发,这让我十分难过,但是这里面既然有天意的成分,那我就先干着。虽然说我现在还是没能摸到SAP-ABAP的门道在哪,但是每一样技术的学习本来就是这样的。但是前端的知识我也不打算放弃。曾经我也挺有梦想的,希望能够谢谢博客,能够在别人面前吹嘘吹嘘。有点虚荣的成分在里面,但是现在的我想明白了。博客这种东西是对自己的一种鞭策,一种学习过程的记录,当我年老之时回顾,我不希望回首我的过去,没能给自己留下点什么,当然能够对别人有所帮助也是意外之喜。所以我回来,继续记录着我的编程不归路。

81.如果函数或者方法在调用前带有关键字new则是对构造函数的调用,如果没有传入参数则圆括号可以省略,两者等价
82.构造函数调用创建一个新的对象,这个对象继承自prototype的属性,构造函数试图初始化这个对象,并将其作为上下文。注意上下文指的是新对象
83.构造函数通常不使用return,当构造函数执行完成时,构造函数调用表达式的的值是构造函数返回值,如果return一个对象则返回的为对象,如果return没指定值,或者返回一个原始值则会被忽略,同时使用新对象
84.由于JS的自由函数定义时未指定形参的类型,在函数调用时也未对实参做类型检查.
85.有些参数是可选的,而需要注意的是如果传入的实参的个数小于形参,则后面的参数会设置成undefined,所以最好把可选的参数放在最后,除了用if语句还可以用 a = a || [];这样来选择,但是a必须先声明
86.当实参个数超过形参时,不能直接引用未命名值,而参数对象arguments可以解决这个问题,这是一个类数组对象,可以通过下标来访问而不需要通过名字。
87.为了限制实参的个数与形参的相同,可以事先检查参数对象的length属性的值是否与形参相同,因为JS不会主动做这个工作。
89.把可以接收任意个数参数的函数称为不定实参函数。
90.可以通过callee调用正在运行的函数,通过caller指代调用当前正在运行的函数的函数。
91.为了避免传递多个参数的过于麻烦,把实参保存在对象里,为了避免在程序运行的过程中报错,最好在开始阶段有参数类型检测,这样能够避免后期检查更大的代价。
92.JS里函数除了定义和调用外,还能赋值给变量,数组,对象的属性,同时还可以传递给其他函数。
93.当函数需要一个静态变量时,最好的方法是使用函数的对象的特性,将这个值声明成函数属性的值,这样能够保证某些场景下该变量不会重复。
94.通过用函数来保存部分代码,然后再调用函数来把全局变量变成局部变量。常规的函数声明太复杂,可以声明一个匿名函数,并在声明之后马上调用。
95.函数对象可以通过作用域链相互关联,函数体内部变量都可以保存在函数的作用域中这种特性称为闭包。
96.对于闭包的部分理解,每次调用都会将局部变量保存在一个新对象里,如果函数返回,就会从作用域中删除,如果不存在嵌套函数,则会被回收,如果存在嵌套函数,每个对象对应一个作用域,并指向一个对象。但如果在外部保存,则这个变量绑定对象将会被回收。如果定义在
嵌套函数,或者返回值,这时会有外部引用指向这个嵌套函数,则这个变量不会被回收。
97.关联到闭包的的作用域都是活动的。
98.闭包中除了this的使用需要将他保留在自定义的变量时,arguments保存到另外的变量中才能够让闭包访问外部的数组
99.函数是特殊的对象,函数中arguments.length是传入函数实参的数量,函数本身的length属性则是定义函数时的形参的数量,有些时候需要判断,避免出错。(arguments.callee.length期望的实参个数:定义的形参)
100.prototype原型,call()和apply()用法基本相同(第一个传入的参数是需要的调用的函数),只是第二个之后的传入参数前者是一个个传入后者不同是传入一个数组。
101.bind()将函数绑定在对象上,f.bind(o),将函数f绑定在对象o上
102.Function("x", "y", "return x*y;")用来构造函数,等同于function(x, y) {return x*y;}
103.可调用对象,RegExp正则表达式
104.可以将上次计算的结果存入到缓存中,这种记忆方式的实现是牺牲了空间来换取时间更优。
105.JS里所有实例对象都是从一个原型对象上继承。
106.JS中有三种不同的对象,构造函数对象,原型对象,实例对象。
107.instanceof运算符,左操作数是待检查类的函数,右操作数则是定义类的构造函数。返回值是bool值。检测对象的继承关系
   例子:o继承c.prototype,则o instanceOf c返回true。c是一个构造函数。
108.检测原型链上的构造函数的用isPrototypeOf()使用这个函数时不需要以构造函数为构造函数为中介。这两个函数的缺点是不能从对象里知道类名,只能从已知的指定。且对于多框架多页面的支持度不好。
109.constructor检测对象属于某个类,缺点在多个页面和框架下不能很好工作,有些对象不一定含有constructor属性。
110.“鸭式辩型”思想,只关心对象的功能,不关心对象是哪个类的对象。quacks()第一个参数为对象,检测之后的的参数如果是字符串则检测是否在对象内存在以他命名的方法,如果是对象,则检测第一个对象的方法也在该对象内,如果是函数则检测第一个对象的原型函数存在同名的方法。
111.valueOf(),将对象转化成原始值。JSON.stringify(),将对象转化成JSON
112.对象的比较,比较的是引用而不是值,方法的借用,调用其他类的方法。私有状态。
113.构造函数的重载,通过传入不同的值来完成初始化,或者通过工厂方法的类的方法返回一个类的实例。
114.子类的构造函数需要调用父类的构造函数时,称为构造函数的方法链,区别于一般的方法链。
115.确保子类继承父类的实现需要借用inherit()函数
                    B.prototype = inherit(A.prototype)//子类派生自父类
                    B.prototype.constructor = B //重载继承来的构造函数
116.构造函数和子类需要通过调用或链接到父类的构造函数和父类方法来实现对父类的方法的调用和扩充。
117.ECMAJS5.0新增的类特性:定义一个类的属性不可枚举,定义不可变的类,封装对象状态(getter, setter),防止类的拓展object.seal()。
118.RegExp正则表达式文本匹配,var patten = /s$/匹配所有以s结尾的字符串  //   等价与创建字符串时的'',等价于var patten = RegExp('s$')。
119.字符串的正则匹配search(),添加一个参数正则表达式,不能全局查找。replace(正则表达式,字符串或函数)通过查找在替换。.match(正则表达式)匹配之前符合条件的返回一个数组。String.spilt(分隔符或者正则表达式)。
120.在html中嵌入JS的四种方法:(1)在html的里,内联。(2)存在一个JS文件里,然后在添加src属性指定的JS里。(3)可以绑定到鼠标事件上onclick和onmouseover等。(4)放在一个URL里,这个URL通过javascript:协议处理
121.将html与JS文件分离是一个重要的思想,能带来许多的便利:内容和行为的分离,简化HTML;多个页面共用时能够一次加载就行了;src这个指向可以是任意URL,能够由其他的服务器提供;更好的使用缓存
122.选择框onchange属性,选择不同的选项时页面可以跟着改变。
123.JS程序执行可以分为:第一阶段,文档载入并执行中的程序,脚本一般按照顺序和条件执行;第二阶段,依靠事件驱动,这个阶段是异步的(内联的脚本可以设置defer(延迟),async(异步))除了控制文档的元素document.write通过这样的声明能够通过此来控制外联脚本的加入。异步的加入脚本时不能有document.write。
124.如果想要一个事件被响应,就要写一个事件处理程序(回调函数)    
125.解决兼容性问题,就是解决IE与其他浏览器的兼容问题。IE中存在一些BUG。一些特性的使用可以模拟。
126.IE支持条件注释,开发过程中也要注意一些事情,如禁用脚本,或者屏幕读取(盲人用户),还有独立于设备。多种因素的考虑。
127.安全性的考虑:(1)客户端的js不能够删除客户端用户的文件,不能有通用的网络能力。(2)客户端也要考虑XXS(跨站攻击)要给HTML元素过滤。(3)拒绝服务攻击,占用大量CPU或者控制用户屏幕
128.setTimeout(function(), 1000):实现一个函数在指定毫秒数后执行(1秒后执行)可用clearTimeout()来取消函数的执行。setInterval(function(), 1000)隔1秒调用一次,重复调用可用clearInterval()来阻止后面函数的继续调用。
129.window.location页面的URL,可以分段识别或者取出,如协议,端口等。通过.hash和.search来查找并且解析。
130.location的.assign()可以显示你指定的URL的中的文档,.replace()也类似,但会从浏览历史中将当前文档中删除。.reload可以让浏览器重新载入当前文档。
131.window.History方法有.back()后退;.forward()前进;.go()传入整数
132.弹出对话框alert()弹出一条信息,confirm()显示一条信息需要用户确认或者取消,prompt()提示用户输入信息,并返回。confirm()与prompt()会使代码产生阻塞(如果文档在载入过程则会停止),alert()在大部分情况下也是如此。这三个弹出的是纯文本文件只能进行文本的处理。
133.showModalDialog(URL, {}, 属性设置)和showModallessDialog(),模态窗口在关闭后返回一个window.returnValue。
134.错误处理window.onerror("描述错误信息", "存放错误JS代码的地址","文档中发生错误的行数")。
135.打开新的窗口window.open(url, "新打开窗口的名字", "窗口的参数", 布尔值),返回值为打开窗口的对象。
136.DOM定义了许多方法来选取元素:
                        用指定的id属性(HTML里元素只允许存在一个唯一的id);
                        用指定的name属性(name属性可以在HTML元素里不唯一,且name元素只在几种元素内有效包括表单,表单元素,