美文网首页
js面向对象

js面向对象

作者: 浅笑6666 | 来源:发表于2019-11-24 13:42 被阅读0次

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

    • 文件合并
    • 文件最小化/文件压缩
    • 使用 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. 寄生组合式继承

    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;

    相关文章

      网友评论

          本文标题:js面向对象

          本文链接:https://www.haomeiwen.com/subject/unrtwctx.html