前端面试 ----- js

1. js中 new 做了什么?

function Person () {
    this.name = name;
    this.age = age;
    this.sex = sex
 
    this.sayName = function () {
        return this.name;
    };
}
 
var person = new Person("tom", 21, "famle");
 
console.log(person.name);

 

     使用new 创建实例对象经过了以下几步:  

   1> 创建一个新对象

      2> 将新对象的_proto_指向构造函数的prototype对象

      3> 将构造函数的作用域赋值给新对象(也就是this指向新对象)

      4> 执行构造函数中的代码(为这个新对象添加属性)

    5> 组后返回新的对象

var Obj = {};
 
Obj._proto_ =  Person.prototype();
 
Person.call(Obj)

 

2. 在浏览器输入URL后发生了什么?

  1> 缓存解析

  注:缓存解析时会从浏览器缓存 ----- 系统缓存 ------ 路由器缓存中依次查看,若有缓存则直接显示页面,如没有再执行DNS域名解析

  2> DNS域名解析

  3> 发起TCP连接(三次握手)

  4> 发送HTTP请求,接受HTTP响应

  5> 断开TCP连接(四次挥手)

  6> 浏览器解析HTML代码,请求js,css等资源,最后进行页面渲染

3. 深拷贝和浅拷贝

  首先了解一下js 数据类型分为基本数据类型和引用数据类型。

  基本数据类型有:Number、String、Boolean、Null、 Undefined、Symbol(ES6) 特点:存储的是该对象的实际数据,(存放在栈中)

  引用数据类型:Object、Array  特点:存储的是该对象在栈中引用,真实的数据存放在堆内存里,(存放在堆内存中的对象,每个空间大小不一样,要根据情况进行特定的配置)

  浅拷贝:拷贝的是数据的引用

  浅拷贝的方法有: 

  1). arr.concat(): 数组浅拷贝
  2). arr.slice(): 数组浅拷贝
  3).Object.assign()对象浅拷贝

  深拷贝:拷贝的是数据

  深拷贝的方法有: 

  1). 使用递归
  2). JSON.stringify()和JSON.parse()
  3). Jquery中的$.extend(deep,target,object) 其中deep为true表示深拷贝,false则表示浅拷贝

4.原型以及原型链  

  每个函数都有一个 prototype 属性

  每一个JavaScript对象在创建的时候就会与之关联另外一个对象,这个对象就是原型,每一个对象都会从原型“继承”属性。

 

JavaScript 常被描述为一种基于原型的语言 (prototype-based language)——每个对象拥有一个原型对象,对象以其原型为模板、从原型继承方法和属性。原型对象也可能拥有原型,并从中继承方法和属性,一层一层、以此类推。这种关系常被称为原型链 (prototype chain),它解释了为何一个对象会拥有定义在其他对象中的属性和方法。

准确地说,这些属性和方法定义在Object的构造器函数(constructor functions)之上的prototype属性上,而非对象实例本身。

5. js 继承的方法

6.闭包

7.

 

posted @ 2020-04-26 16:01  忧伤还是快乐  阅读(58)  评论(0)    收藏  举报