1、prototype原型链
原型prototype简介
原型是函数的一个属性,也是一个对象
可通过prototype创建对象,创建的对象共享原型的所有属性
原型对象、实例、构造函数constructor之间的四种关系
构造函数通过new方法可创建实例
每个构造函数都具有一个原型对象
原型对象都包含一个指向构造函数的指针
实例具有一个指向原型对象的内部指针
原型创建对象的缺点:共享
当共享的属性有数组时,创建的某个对象修改了数组,所有对象的数组都会被修改
较好的创建对象的方法
使用构造函数保证属性的私有化。并不被污染,结合原型共享方法。
原型链
举例子: 程序寻找方法和属性的时候先在当前实例中寻找,找不到再到实例的原型找,实例的原型指向父类的实例,找不到再到父类的原型找——即父类的父类的实例。
因此,原型链就是以原型为中介联系起父类和子类,子类的实例指向子类的原型,子类的原型指向父类的实例,实现继承的功能
2、闭包:注意事项
闭包是指有权访问另一个函数作用域中的变量的函数
作用:
- 实现公有变量(函数累加器)
- 可以做缓存
- 实现封装,属性私有化
- 模块化开发,防止污染全局变量
注意事项:
-
内存泄漏内存溢出
——内存泄漏:占用的内存没有及时释放。内存泄露积累多了就容易导致内存溢出。
函数执行完后,函数内的局部变量没有释放,占用内存时间会变长,容易造成内存泄露。 -
关于闭包中的this对象。
this对象指向的是什么,要看函数所运行的环境,如果函数在全局范围内运行,指向的对象就是window对象。
参考内容 -
闭包允许内层函数引用父函数中的变量,但是该变量是最终值。
参考内容
3、call和apply的区别
都是两个参数,功能是调用函数
第一个参数作用是设置环境
第二个参数:
call:可以加入多个参数
apply:参数只能以数组形式加入
== bind ==
bind为函数绑定环境
4、盒子在标准浏览器和IE浏览器的区别
两者的区别在于content的不同,IE盒模型的content包括border、padding
5、undefined和null的区别
undefined:
在javascript中,undefined是一个没有设置值的变量
typeof是一个没有值的变量,会返回undefined
null:
在JavaScript中,null表示“什么都没有”。
null是一个只有一个值的特殊类型,表示一个空对象
undefined和null的区别:
- undefined 表示一个变量没有被声明,或者被声明没有被赋值(未初始化),如果一个函数什么都不返回,则该函数默认返回undefined。null 则表示空值
- undefined 不是一个有效的JSON,而 null 是;
- null 和 undefined 的值相等,但类型不等:undefined的类型(typeof)是 undefined ;null的类型(typeof)是 object。
- null执行算术转换时,则值为0;undefined 不执行任何此类转换,进行算数计算时,结果为NAN