js面向对象

2019-11-24  本文已影响0人  浅笑6666

1.说说你对闭包的理解

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

闭包有三个特性:


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.你如何对网站的文件和资源进行优化


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. 寄生组合式继承

8.Javascript对象的几种创建方式

  1. 工厂模式
  2. 构造函数模式
  3. 原型模式
  4. 混合构造函数和原型模式
  5. 动态原型模式
  6. 寄生构造函数模式
  7. 稳妥构造函数模式

9.你有哪些性能优化的方法?

详情请看雅虎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表达式又称Dynamic properties(动态属性)
  7. 图片预加载
    • 将样式表放在顶部,将脚本放在底部

10.平时如何管理你的项目?

  1. 先期团队必须确定好全局样式(globe.css),编码模式(utf-8) 等
  2. 编写习惯必须一致
    • 例如都是采用继承式的写法,单样式都写成一行
  3. 标注样式编写人,各模块都及时标注
    • 标注关键样式调用的地方
  4. 页面进行标注
    • 例如页面模块开始和结束
  5. CSS跟HTML 分文件夹并行存放,命名都得统一
  6. JS 分文件夹存放 命名以该JS功能为准的英文翻译

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

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

11.1 闭包引起内存泄露的原因

  1. 循环引用导致了内存泄漏
  2. 由外部函数调用引起的内存泄漏

11.2 避免内存泄漏

  1. 打破循环引用
  2. 添加另一个闭包
  3. 避免闭包自身

11.3 解决闭包

用完直接==null;

上一篇下一篇

猜你喜欢

热点阅读