一次凉凉的前端面经

感触

  前两周也是经历了人生的第一次面试,很紧张但是也因此收获了许多。一面的时候面试官问的挺基础的,也没有深入去问,等到二面的时候面试官真的很厉害,对一个问题能一直问为什么,为什么知道你说 不理解、不清楚、不会 之类的话才放过你。。。面试过后就知道自己已经凉凉了,还是自己太菜了,有些知识知道但是没有运用到实际中,缺乏练习。

  下面就给大家总结一下我的所有题目以及部分答案

一面:

  1. 选中div中第三个元素,并且不为空
  2. 水平、垂直居中的方式
  3. 怎样在关闭浏览器的时候把localStroge中的内容删除(sessionstroge中设置)
  4. 什么是跨域?常见的解决方式(我的另一篇博客 “聊聊跨域”
  5. 行内元素、块级元素
  6. 原型、原型链
  7. 继承(不用原型,取到函数本身的属性,使用hasownPrototype)
  8. node项目中都用到那些基本知识点
  9. vue生命周期
  10. js中基本的类型
  11. 事件委托 【看了你就懂的文章】
  12. display有那些值

一、选中div中第三个元素,并且不为空的

css:
	div:nth-child(3):not(:empty){
		color:red
	}

这题考查到的知识点:1、css选择器 2、伪元素
  我当时没有想起来 :empty 这个伪类,一直想怎样判断空,到最后也没有想起来,面试官挺好的,看我没有写出来还给我讲解了一下。
   :nth-child()这个伪元素是选中第几个元素,下标从1 开始
   :not() 是对括号中的内容进行取反操作

二、水平、垂直居中的方式(这个重点说一下,二面也问了)

水平:

行内元素:
	.parent{
		text-align:center;
	}

块级元素:
	.self{
		margin:0 auto;
	}
	
	//设置父元素relative,距离左边50%,然后再设置子元素 根据父元素自身的-50%
	.parent{
		float:left;
		position:relative;
		left:50%;
	}
	.child{
		left:-50%;
	}

	//通过flex布局
	.father {
        width: 500px;
        display: flex;
        justify-content: center;     //设置水平方向居中
    }
    .children{
        width: 50px;
        height: 50px;
    }

垂直:

行内元素:
	//通过设置line-height和height一样的高度
	.parent{
		height:200px;
		line-height:200px;
	}


	//已知元素的高度
	.father {
        width: 500px;
        height: 200px;
        position: relative;
    }
    .children{
        width: 50px;
        height: 50px;
        position: absolute;
        top: 50%;
        //如果元素高度不定:transform: translateY(-50%)
        margin-top: -25px;  //减去自身的一半
    }

	//flex布局
	.father {
        width: 500px;
        height: 200px;
        background: #f00;
        display:flex;
        flex-direction: column;  //设置成从上到下
        align-items: center;   //设置垂直方向居中
    }
    .children{
        width: 50px;
        height: 50px;
        background: #ccc;
    }

三、原型、原型链

  献上一张”网红“图
原型链
  什么是原型?什么又是原型链? 一篇不错的博客 我理解的原型就是属性、方法的集合;原型链是:每个对象都有一个指向原型内部的指针,原型对象也有自己的原型,直到原型对象为null。(能看懂上面的图,原型链就理解的差不多了)

prototype原型

  上图可以看到每个函数对象都有一个prototype,它指向一个函数的原型对象,一个函数对象肯定会有一到几个实例,其中实例f1、f2._ proto_ ===Foo.prototype 那么 _ proto_ 又是什么呢?

_ proto_ 隐式原型
  _ proto_是每个对象都有的属性,它指向一个原型对象

  var Person=function(){};
  Person.prototype.name='Emaily';
  Person.prototype.age='22';

  var p1 = new Person();
  console.log(p1._ proto_ === Person.prototype); //true

constructor原型
  constructor 这个属性相当于一个’指针’,指向这个函数本身,即Person.prototype.constructor === Person

四、继承的实现方式(优缺点)

  1. ES6中的class(extends实现,子类中super())
  2. 原型链继承
  3. 借用构造函数(call…)
  4. 组合继承(原型+构造)

1)原型链继承:
  缺:1、在创建子类型的实例时,不能向父类型的构造函数中传递参数
    2、原型共享问题(改变原型)

function A(){
	age:22
}; 
A.prototype.name = '132';
A.prototype.sayName = function(){
	console.log(this.name);
}
function B(){
	sex:'female';
}; 
B.prototype = new A();
var b = new B();
console.log(b.name);

2)借用构造函数:
  缺:每个实例都创建一个自己的副本,无法实现函数复用,浪费空间
  优:可以传递参数

function A(name,age){
	this.name = name;
	this.age = age;
};
function B(){
	A.call(this,'tyj',22)
};
var b = new B();

3)组合继承(原型+构造):

function A(name,age){
	this.name = name;
	this.age = age;
};
A.prototype.sayName = function(){
	console.log(this.name);
}
function B(){
	A.call(this,'tyj',22)   //调用A
};
B.prototype = new A();  //实例化
B.prototype.constructor = B;  //多次继承之后constructor 会改变

  这次就先更新这些知识,等我的下一篇博客再把二面的知识点整理出来(二面的知识点太多了,一时半会儿总结还挺困难),继续关注我的最新博客哦!

猜你喜欢

转载自blog.csdn.net/tang422622/article/details/88540120