1实现一个clone函数
在JavaScript的世界里, 数据被定义为以下 7 种数据类型:
6种 原始类型(又叫 基本类型):
Boolean
Null
Undefined
Number
String
Symbol
和 Object
(需要注意的是, 名词从英文翻译成中文,可能会出现多种叫法,比如“primitive type”,中文叫 “原始类型”,也有叫“基本类型”.)
另外,根据变量值传递的方式,我们又可以将数据区分为“值类型”和“引用类型”.
值类型 : 数据在传递和赋值时,数据将自己复制一份给对方.
JavaScript中原始类型都属于值类型(string, number, boolean, null, undefined, symbol).
引用类型 : 在传递和赋值时, 数据将自身的引用(又叫“地址”、“指针”)给对方.
JavaScript中数组、函数、自定义对象,三种属于引用类型.
实现
引用类型数据都是由原始类型数据组成的,因此我们可以将引用类型数据一层层往下拆, 将里面的每一个原始类型数据赋值给新对象.
#1: 判断传入的对象是数组类型的对象,还是其它类型的对象.
#2、#3: Array 和 Object 的 typeof是 “object”, Function 的typeof 是“function”. 它们都是引用类型
#4: 原始类型直接赋值.
#5: 创建一个新的函数,并且将新函数与 copy 对象绑定.
2:浏览器是如何渲染页面得
1. 浏览器下载的顺序是从上到下,渲染的顺序也是从上到下,下载和渲染是同时进行的。
2. 在渲染到页面的某一部分时,其上面的所有部分都已经下载完成(并不是说所有相关联的元素都已经下载完)。
3. 如果遇到语义解释性的标签嵌入文件(JS脚本,CSS样式),那么此时IE的下载过程会启用单独连接进行下载。
4. 并且在下载后进行解析,解析过程中,停止页面所有往下元素的下载。
5. 样式表在下载完成后,将和以前下载的所有样式表一起进行解析,解析完成后,将对此前所有元素(含以前已经渲染的)重新进行渲染。
6. JS、CSS中如有重定义,后定义函数将覆盖前定义函数。
3call,apply,bind方法得作用分别是什么
1.作用
改变this的指向
在js中,所有的函数再被调用的时候都会默认传入两个参数,一个是this,还有一个是arguments。在默认情况下this都是指当前调用函数的对象。但是有时候我们需要改变this的指向,也就是说使函数可以被其他对象来调用,那么我们应该怎样做呢?这时候我们就可以使用call,apply和bind方法了。
2.首先搞清楚call,apply和bind方法的来历
在js中所有的函数都是Function的实例,而且对于Function来说,它的原型即Function.prototype中含有很多东西,其中call,apply和bind方法就是Function原型中的方法,所以根据原型的规则,所有的函数都可以使用原型中属性和方法,所以来说,对于所有的函数都可以使用call,apply和bind方法。
简单一句话:call,apply和bind都是Function原型中的方法,而所有的函数都是Function的实例。
3.三者的异同
1.call,bind,apply这三个函数的第一个参数都是this的指向对象,直到第二个参数差别就出来了。
2.call的参数是直接放进去的,直接用逗号分离;
3.apply的所有参数都必须放在一个数组里面传进去;
4.bind除了返回是函数以外,它的参数和call的放入方式一样。
5.它们三者的参数不限定是string类型,允许是各种类型,包括函数、对象等等。
网友评论