js重点及难点
前言:
转眼间,实习又一周过去了,这一周给我的感觉就是很累,但是收获也是不少的,至少能与付出成正比。自己要学的东西还有很多的,在学校学的东西跟在公司学的还是有很大的区别的,而且从学校出来进入公司学习,在学习上的习惯要有改变,以前在学校学习都是以老师教课为主,自己再回去巩固巩固,而进入公司以后就不一样了,自己要有自己的一套学习方法。在公司主要靠自己自学并且在实践中去应用所学到的知识,所以要懂得一周下来去反思去总结这一周究竟学到了什么,自己又掌握了多少。下面就是我这一周遇到比较棘手的问题:
- javascript闭包问题,下面是我个人的理解:
首先什么叫闭包?
能够访问其他函数作用域内变量的函数都叫闭包。举个例子:
//函数A
function A(){
var a=2;
//函数B
function B(){
//在函数B里面可以访问函数A里的变量a
console.log(a);
}
}
下面我们来分析一下为什么?
1.当函数A定义时,A的作用域链中存放着当前环境下的变量,也就是GO(Global object)。
2.当函数A函数执行时会产生一个运行时上下文,此时A的作用域链的顶端会存放这个运行时上下文,也就是AO(运行时上下文),所以,GO就会顶端被挤到第二行。
3.这时候执行A的时候遇到了B函数的定义,B的作用链会直接拿到A的劳动成果。
4.当B函数执行时,B的作用域链顶端也会生成自己的运行时上下文,自然而然拿到的A函数的劳动成果只能往下排,但是当B函数执行时访问变量的访问顺序是自顶而下的,先从自己的执行期上下文里找,找不到就顺着A的AO里找。。。所以当然就能访问到函数A的变量。
2.第二个问题也是比较难理解的javascript中的原型问题:
还是先解释一下:当一个类定义时,它就有原型对象(prototype object),原型对象必须有多个内部特定属性来表示类的特性。
/*这是一个构造函数,构造函数与一般函数形式一样,只是构造函数可以new一个对象
一般构造函数我们习惯用驼峰式命名*/
function Person(name,age){
this.name=name;
this.age=age;
}
//定义一个对象表示中国人
var Chinese={}
//将Person的原型指向chinese
Person.prototype=Chinese;
在创建类的实例时,该实例隐式包含有对自身原型对象的引用,因此实例中也包含有[Prototype]属性。一个类的所有属性都定义在原型对象上面,当类的实例访问一个属性时,javascript解释引擎就会去原型对象上查找属性,然后执行。
例:
function GrandFather(){
this.g1="";
this.g2="";
}
function Father(){
this.p3="";
this.p4="";
}
function Child(){
this.C5="";
}
Father.prototype=new GrandFather();
Child.prototype=new Father();
那么在实例化GrandFather时,这个实例隐式包含有自身内部属性[Prototype]的值,该值包含有GrandFather类属性的描述;同样在实例化Father时,这个实例隐式包含有自身内部属性[Prototype]的值,该值包含有Father类属性的描述;在实例化Child时,该实例包含有自身内部属性[Prototype]的值,该值包含有Child类属性的描述。
如果Child的实例调用一个属性时,那么就会按照下面的步骤:
(1)首先查找Child是否存在指定属性,如果存在就执行,如果不存在就查找该实例包含的自身内部属性[Prototype]的值,查到原型对象是Father实例,执行下一步。
(2)查到Father是否存在指定属性,如果存在,就执行该属性,如果不存在,就查找该实例包含的内部属性[Prototype]的值,查到原型对象是GrandFather实例,执行下一步。
(3)查找GrandFather是否存在指定属性,如果存在就执行,如果不存在,就查找该实例包含的内部属性[Prototype]的值,查到原型对象是Object实例,执行下一步。
(4)查找Object是否存在该属性,如果存在就执行,如果不存在,就会返回undefined,因为Object就是原型链的尽头。
因为方法就是类型为function的属性,因此,这一过程,同样适用于方法。
3.javascript中继承的方法:
1⃣️原型链
2⃣️两个构造函数同时使用一个原型
3⃣️圣杯模式(使用一个中间构造函数)
用的比较多的就是第三种实现方式。
上面就是遇到的比较难理解的点,除此之外这一周还复习了Java方面的内部类,集合框架以及线程并发等知识点。前端方面,自己也跟着官方文档以网上视频学习了bootstrap框架以及handlebars的模版,有了官方的帮助文档,学起来还是比较简单的,所以说只要自己愿意下功夫还是能学到很多东西的。接下来的时间里,继续加油吧!