js面向对象面试资料

 

js面向对象面试资料

 

1 说说你对闭包的理解

 

使用闭包主要是为了设计私有的方法和变量。闭包的优点是可以避免全局变量的污染,缺点是闭包会常驻内存,会增大内存使用量,使用不当很容易造成内存泄露。

 

闭包有三个特性:

 1.函数嵌套函数

 2.函数内部可以引用外部的参数和变量

 3.参数和变量不会被垃圾回收机制回收

 

2、call() 和 .apply() 的区别和作用?

 

作用:动态改变某个类的某个方法的运行环境。

1、call,apply都属于Function.prototype的一个方法,它是JavaScript引擎内在实现的,因为属于Function.prototype,所以每个Function对象实例(就是每个方法)都有call,apply属性。既然作为方法的属性,那它们的使用就当然是针对方法的了,这两个方法是容易混淆的,因为它们的作用一样,只是使用方式不同。

2、语法:foo.call(this, arg1,arg2,arg3) == foo.apply(this, arguments) == this.foo(arg1, arg2, arg3);

3、相同点:两个方法产生的作用是完全一样的。

4、不同点:方法传递的参数不同。

 

3、javascript里面的继承怎么实现,如何避免原型链上面的对象共享

 

用构造函数和原型链的混合模式去实现继承,避免对象共享可以参考经典的extend()函数,很多前端框架都有封装的,就是用一个空函数当做中间变量

 

4、JavaScript原型,原型链 ? 有什么特点?

 

原型对象也是普通的对象,是对象一个自带隐式的 __proto__ 属性,原型也有可能有自己的原型,如果一个原型对象的原型不为null的话,我们就称之为原型链。*

 原型链是由一些用来继承和共享属性的对象组成的(有限的)对象链。

 

5、你如何对网站的文件和资源进行优化

 

期待的解决方案包括:

 文件合并

 文件最小化/文件压缩

 使用 CDN 托管

 缓存的使用(多个域名来提供缓存)

 其他

 

 

6、请说出三种减少页面加载时间的方法。

 1.优化图片

 2.图像格式的选择(GIF:提供的颜色较少,可用在一些对颜色要求不高的地方)

 3.优化CSS(压缩合并css,如margin-top,margin-left...)

 4.网址后加斜杠(如www.campr.com/目录,会判断这个“目录是什么文件类型,或者是目录。)

 5.标明高度和宽度(如果浏览器没有找到这两个参数,它需要一边下载图片一边计算大小,如果图片很多,浏览器需要不断地调整页面。这不但影响速度,也影响浏览体验。

当浏览器知道了高度和宽度参数后,即使图片暂时无法显示,页面上也会腾出图片的空位,然后继续加载后面的内容。从而加载时间快了,浏览体验也更好了。)

6.减少http请求(合并文件,合并图片)。

 

7、javascript继承的6种方法

1,原型链继承

2,借用构造函数继承

3,组合继承(原型+借用构造)

4,原型式继承

5,寄生式继承

6,寄生组合式继承

 

javascript对象的几种创建方式

1,工厂模式

2,构造函数模式

3,原型模式

4,混合构造函数和原型模式

5,动态原型模式

6,寄生构造函数模式

7,稳妥构造函数模式

 

8、你有哪些性能优化的方法?

(详情请看雅虎14条性能优化原则)。

1) 减少http请求次数:CSS Sprites, JS、CSS源码压缩、图片大小控制合适;网页Gzip,CDN托管,data缓存 ,图片服务器。

 

2) 前端模板 JS+数据,减少由于HTML标签导致的带宽浪费,前端用变量保存AJAX请求结果,每次操作本地变量,不用请求,减少请求次数

 

3) 用innerHTML代替DOM操作,减少DOM操作次数,优化javascript性能。

 

4) 当需要设置的样式很多时设置className而不是直接操作style。

 

5) 少用全局变量、缓存DOM节点查找的结果。减少IO读取操作。

 

6) 避免使用CSS Expression(css表达式)又称Dynamic properties(动态属性)。

 

(7) 图片预加载,将样式表放在顶部,将脚本放在底部 ?加上时间戳。

 

9平时如何管理你的项目?

 1先期团队必须确定好全局样式(globe.css),编码模式(utf-8) 等;

 

 2 编写习惯必须一致(例如都是采用继承式的写法,单样式都写成一行);

 

 3 标注样式编写人,各模块都及时标注(标注关键样式调用的地方);

 

 4 页面进行标注(例如 页面 模块 开始和结束);

 

 5 CSS跟HTML 分文件夹并行存放,命名都得统一(例如style.css);

 

 6 JS 分文件夹存放 命名以该JS功能为准的英文翻译。

 

10、什么是闭包,闭包什么情况会导致内存溢出?

直接来讲,闭包就是能够读取其他函数内部变量的函数,在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成"定义在一个函数内部的函数",所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。闭包最大用处有两个,一个是可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。

闭包引起内存泄露的原因有两种:

1. 循环引用导致了内存泄漏

2. 由外部函数调用引起的内存泄漏

避免内存泄漏

1. 打破循环引用

2. 添加另一个闭包

3. 避免闭包自身

解决闭包:用完直接==null;

 

posted @ 2017-05-29 13:34  手掌日月摘星辰  阅读(322)  评论(0编辑  收藏  举报