101、请简述prototype、__proto__ constructor三者的关系
 
1、prototype:
    每一个函数都有一个prototype这个属性,而这个属性指向一个对象,这个对象我们叫做原型对象
 
    作用:
        a、节约内存
 
        b、扩展属性和方法
 
        c、可以实现类之间的继承
 
2、__proto__
 
    1、每一个对象都有一个__proto__属性
 
    2、__proto__指向创建自己的那个构造函数的原型对象
 
    3、对象可以直接访问__proto__里面的属性和方法
 
 
 
3、constructor:
    指向创建自己的那个构造函数
 
 
总结:
    当我们创建一个构造函数的时候这个构造函数自带了一个prototype属性,而这个属性指向一个对象,也就是原型对象。
 
    这个原型对象里面有一个constructor构造器,它的作用是指向创建自己的构造函数。除此之外prototype还可以存放公共的属性和方法。
 
    当我们实例化一个对象的时候,这个对象自带了一个__proto__属性,这个__proto__指向创建自己的构造函数的原型对象。可以使用这个原型对象里面的属性和方法
 
102、请写出方法继承的方式
 
1、call 、apply:不建议使用浪费内存
 
2、原型对象继承
 
3、原型拷贝继承
 
4、原型链继承
 
5、混合继承
 
6、继承继承
 
7、ES6 class  super()
 
 
注意:以上方法用代码表示 不允许写文字
 
103、请说出call、apply、bind的区别
 
bind:bind绑定完this的指向后会返回一个新的函数体,不会被立即调用
 
call&apply:绑定完this的指向后会立即调用
 
call与apply的区别:
    call:第一个参数是this的指向,第二个以及后面的所有参数需要一个个进行传递
 
    apply:第一个参数是this的指向,第二个参数是一个数组
 
104、请解释一下什么叫同源策略,以及为什么浏览器会有同源策略
 
同源策略是浏览器的一个安全功能,不同源的客户端在没有授权的情况下,不能读取对方资源
    
为了保障数据的安全,即非同源网页不可请求
 
 
105、什么是闭包?用途?注意的地方?
 
1、闭包就是可以读取其他函数内部变量的函数
 
2、可以读取函数内部的局部变量 2、让这些变量始终保持在内存当中
 
3、由于闭包会使得函数中的变量都被保存在内存当中,内存会消耗很大,所以不能够滥用闭包,否则会造成网页性能的问题
 
106、设计模式(代码自己完善)
 
1、单例模式:
    保证程序中,使用该模式的类只有一个实例
 
    代码....
 
2、代理模式:
    
    代码....
 
3、观察者模式:
    某个人--->观察某件事件---》事情发生变化---》通知这个人---》去做某件事情
 
    代码....
 
107、什么是预加载&&懒加载
 
懒加载:
     当访问一个页面的时候,先把img元素或是其他元素的背景图片路径替换成一张大小为1*1px图片的路径(这样就只需请求一次,俗称占位图),只有当图片出现在浏览器的可视区域内时,才设置图片正真的路径,让图片显示出来。这就是图片懒加载。
 
实现原理:
    1、将图片地址放在元素的自定义属性中
 
    2、当页面加载完成后,根据scrollTop判断图片是否在用户的视野内,如果在就取出属性值放到src属性中
 
 
预加载:
    

原生js大总结十一的更多相关文章

  1. 原生js大总结九

    81.ES6的Symbol的作用是什么?   ES6引入了一种新的原始数据类型Symbol,表示独一无二的值   82.ES6中字符串和数组新增了那些方法   字符串       1.字符串模板    ...

  2. 原生js大总结十

    91.ajax的优点     a.提高运行效率   b.提高用户体验,让多件事情同时发生   c.在不刷新页面的情况下可以对局部数据进行加载和刷新       92.ajax请求的流程   1.创建通 ...

  3. 原生js大总结二

    011.if语句的优化   1.把次数多的条件和执行结果放到最前面   2.减少第一次无用的判断,可以用嵌套判断   3.判断语句禁止出现三次嵌套     012.谈谈你对switch的理解   1. ...

  4. 原生js大总结八

    071.如何组织事件冒泡   利用事件对象属性:stopPropagation 和 cancelBubble   stopPropagetion是一个方法:e.stopPropagetion();   ...

  5. 原生js大总结七

    061.如何获取父级节点.上一个子级节点.下一个子级节点    nextElementSibling  后一个兄弟元素  (如果没有是null)    previousElementSibling   ...

  6. 原生js大总结四

    031.数组常用的一些方法   1.push: 在数组最后添加一个或者多个元素,返回添加后数组的长度   2.pop: 从数组最后取出一个元素,返回的是数组的最后一个元素(取出的元素)   3.uns ...

  7. 原生js大总结五

    041.在js中如何用方法将10进制的字符转换成16进制和8进制   数字.toString(16) 数字.toString(8)     042.如何创建时间对象   new Date()   04 ...

  8. 原生js大总结三

    021.定义函数的几种方式   1.关键字函数:function fnName(){};   2.字面量函数:var fn = function(){};   3.构造函数:var fn = new ...

  9. 原生js大总结一

    001.浅谈堆和栈的理解?   js变量存储有栈存储和堆存储,基本数据类型的变量存储在栈中,引用数据类型的变量存储在堆中 引用类型数据的地址也存在栈中   当访问基础类型变量时,直接从栈中取值.当访问 ...

随机推荐

  1. mysql的my.cnf文件详解

    一.缘由 最近要接手数据库的维护工作,公司首选MySQL.对于MySQL的理解,我认为很多性能优化工作.主从主主复制都是在调整参数,来适应不同时期不同数量级的数据. 故,理解透彻my.cnf里的参数是 ...

  2. oracle 正序 逆序 排序查询

    正序:从小到大 order by t.id asc 逆序:从大到小 order by t.id desc

  3. CCF模拟 无线网络

    无线网络 时间限制: 1.0s 内存限制: 256.0MB   问题描述 目前在一个很大的平面房间里有 n 个无线路由器,每个无线路由器都固定在某个点上.任何两个无线路由器只要距离不超过 r 就能互相 ...

  4. Linux下redis安装(单机版)

    redis是当前比较热门的NOSQL系统之一,它是一个key-value存储系统.和Memcached类似,但很大程度补偿了 memcached的不足,它支持存储的value类型相对更多,包括stri ...

  5. 华为荣耀3C最新版ROM的root,(4.7.1和4.8.1等等通用方法)

    手头一台honor 3c的机器.应该是线刷的时候,把IMEI给刷掉了.导致移动2G卡无法上网. 刷了4.7.1或者4.8.1.尝试了全部方法都root失败了. 正好我手头有6582的代码.我想.既然系 ...

  6. jQuery11 data() : 数据缓存

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  7. vim 计算器寄存器使用

    我们可能会在vim的使用中,碰到下面的情况 当我正在写一周预算的时候,我想计算下每天我买菜花2.7,每天买两顿,周死晚上出去吃,周六额外买1.5斤14.8一斤的猪肉... 这时候你打算怎么办呢,是不是 ...

  8. python-打开网页

    最近一直想通过python来实现网页的操作.因为想把自己vimrc的配置直接通过脚本来实现.比较理想的情况下,就是通过一个脚本,把自己需要的一些资源直接从网上下载下来,然后再对下载的资源进行安装等操作 ...

  9. html5中的容器标签和文本标签

    html5中的容器标签和文本标签 html中的容器级标签和文本级标签,css中的块级元素和行内元素是我们常常拿来比较的四个名词(行内块级暂时先不考虑). 容器标签 容器级的标签可以简单的理解为能嵌套其 ...

  10. 突破极限 解决大硬盘上安装Unix新思路

    一.问题提出 硬盘越做越大,然我喜欢让我忧.10年前就遇到过在586电脑BIOS不认识超过8.4G容量硬盘的问题,以及Windows Nt操作系统不认大硬盘(容量超过8.4G)的问题,对于Linux ...