前端开发面试总结(七)

深度解析new原理以及模拟实现

经过关键字new关键字建立的实例有如下的两个特色:javascript

  • 一、实例能够访问到构造函数里面的属性
  • 二、实例能够访问到原型里面的属性

模拟实现new的代码:java

function create(){
    //建立一个空对象
    var obj = new Object();
    //得到构造函数,arguments去除第一个参数
    var Con = [].shift.call(arguments);
    //连接到原型,obj能够访问到构造函数原型的属性
    obj.__proto__ = Con.prototype;
    var ret = Con.apply(obj, arguments);
    //优先返回构造函数返回的对象
    return ret instanceof Object ? ret : obj;
}
复制代码

详细解释赋值,浅拷贝和深拷贝的区别

1、赋值数组

  • 基本类型赋值:赋的是值,赋值先后两个变量互相之间不影响。
  • 引用类型赋值:赋的是引用的地址,引用赋值以后这两个变量有相同的引用,指向同一个对象,相互之间会有影响。

2、浅拷贝 浅拷贝就是对于引用的引用类型的值拷贝的只是引用的地址,当引用的内容发生改变的时候,两个变量的内容都会受到影响。浅拷贝程序示例:app

var a = {
    name: "zhangsan"
};

var b = a;

console.log("修改以前:");
console.log(a); //zhangsan
console.log(b); //zhangsan

a.name = "lisi";

console.log("修改以后:");
console.log(a); //lisi
console.log(b); //lisi
复制代码

浅拷贝的使用场景函数

  • Object.assign():能够将一个或者多个对象的全部可枚举的属性全都复制到另外一个对象。
  • 展开语法{...}
  • Array.prototype.slice():该方法返回的是一个新的数组对象,这个方法执行的是原数组的浅拷贝,原始数组是不会被改变的。

3、深拷贝ui

执行深拷贝的时候,会拷贝全部的属性,而不是只拷贝地址。深拷贝完成以后,两个值之间就不会相互影响了。spa

深拷贝的使用场景prototype

JSON.parse(JSON.stringift(object)):用于对JSON对象和JSON字符串之间的转换,在这个过程当中是深拷贝,对象的每个可枚举的属性都会被复制。code

总结对象

和原数据是否指向同一对象 第一层数据为基本数据类型 原数据中包含子对象
赋值 改变会使原数据一同改变 改变会使原数据一同改变
浅拷贝 改变会使原数据一同改变 改变会使原数据一同改变
深拷贝 改变会使原数据一同改变 改变会使原数据一同改变
相关文章
相关标签/搜索