前端面试 ----- 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.

浙公网安备 33010602011771号