1. new对象做了什么?
- 创建一个新对象
- 将新对象的_proto_属性指向构造函数的原型对象
- 将构造函数的作用域赋给新对象(将this指向新对象)
- 执行构造函数内部的代码,将属性添加给this新对象
- 返回新对象
2. window.onload 和 document.ready的区别
- window.onload 是页面资源(dom树和图片等资源)都加载完成执行
- document.ready 是dom树加载完之后执行
- document.onload 是在结构和样式加载完之后执行
3. H5如何兼容iPhone X的刘海
- safeAreaInsets 判断是圆角矩形还是正常的长方形
- 利用安全区域和viewport
- zhuanlan.zhihu.com/p/50178283
4. ES5的继承
function Parent() {
this.a = '111',
this.sing = function() {
console.log('sing')
// console.log(this)
}
}
var pa = new Parent();
// pa.sing()
function Stu() {
}
Stu.prototype = new Parent();
var st = new Stu();
st.sing()function Person() {
this.name = "猪猪";
this.age = 10;
}
function show() {
alert(this.name + ":" + this.age);
}
//实例化
var per = new Person();
//show函数继承per的属性
show.apply(per);5. em 和 rem
- em 是根据基准来缩放字体大小,不是固定的,会继承父级元素的字体大小
- rem 相对于根元素(html)
- IE6-IE8 不支持rem和em,为了兼容性将rem和em和px一块使用
6. cookie
- 记录用户的登录信息
- 默认过期时间是一次会话(即浏览器被关闭),但要是通过expires设置了过期时间的话,就按照这个时间(超过就删除)
- 默认不会保存任何数据(4KB左右)
- 作用范围:同一浏览器的同意路径下访问(同一浏览器,默认下一级也可访问,上一级的话,需配置path)
7. 同源策略
- 协议,端口,域名都相同
8. 选择器
- 选择3的倍数的子元素 :nth-child(3n)
- 奇数,偶数 :nth-child(odd) :nth-child(even)
9. vue---数据拦截
- 首先判断是否是对象,若是对象的话,则遍历key值,定义一个函数,传三个值(拦截目标对象,key,value),然后通过object.defineproperty,传三个参数(目标对象,key,{set,get函数})
- 其次判断是否是数组,若是数组的话,看是否是那七个方法,若是,直接通知更新,否则,则需要通过set,get来进行更新
10. 阻止事件冒泡
- e.stopPropagation()
- e.cancelBubble = true
11. img图片实现等比例缩放
img {
width: auto;
height: auto;
max-width: 200px;
max-height: 200px;
}若超出父元素的话,给父元素设置overflow:hidden;
IE6不兼容:
max-width:200px;
_width:expression(this.width > 200 ? "200px" : this.width);12. 跨域问题
协议,域名,端口
mock server fake api (模拟接口)
- jsonp----ajax存在跨域安全问题但是script标签不存在这类问题
- cors
- iframe(不推荐)
- 反向代理
13. this(严格模式)(参考:www.jb51.net/article/118…)
- 全局作用域下,this指向window
"use strict";
console.log(this)
setTimeout(function() {
console.log(this)
},100)- 全局作用域下,函数的this指向undefined
testStatic()
function testStatic() {
console.log(this)
}- 构造函数中的this,指向该构造函数创建的对象
function Parent() {
this.a = '111',
this.sing = function() {
console.log('sing')
console.log(this)//指向Parent
}
}
var pa = new Parent();
pa.sing()- 对象函数中this,指向调用函数的对象实例
var obj = new Object();
obj.p = 'tck'
obj.song = function() {
console.log(this)//{p:tck,song:f}
}
obj.song()- 事件处理中的this,指向触发事件的对象
document.getElementById('app').onclick = function() {
console.log(this)
}- 内联函数的this,两种情况,一种时undefined,一种是指向该元素
<button onclick="alert((function(){'use strict'; return this})());">内联事件处理1</button>
<!-- 警告窗口中的字符为undefined -->
<button onclick="'use strict'; alert(this.tagName.toLowerCase());">内联事件处理2</button>
<!-- 警告窗口中的字符为button -->14. 箭头函数的this
- 函数体内的this,指向定义时所在的对象,并不是使用时所在的对象
- 不可以new(即不可以作为构造函数)
- this的指向是固定的
// 指向window
var ok = {
fn :() =>{
console.log(this)
}
}
ok.fn()