new的时候做了什么?
//1,创建了一个空对象
//2,将空对象的原型,指向于构造函数的原型
//3,将空对象作为构造函数的上下文(改变this指向)
//4,对构造函数有返回值的处理判断
//浅拷贝和深拷贝
闭包
原型链:
1,原型可以解决什么问题
对象共享属性和共享方法
2,谁有原型
函数拥有:prototype
对象拥有: __proto__
3,对象查找属性或者方法的顺序
function Fun(){
// this.run = '1'
}
// Fun.prototype.run = '2'
var obj = new Fun()
// obj.run = '3'
// obj.__proto__.run = '4'
Object.prototype.run = '5'
console.log(obj.run);
//打印结果是:3,1,4,2,5
1:先在对象本身查找-->
2:构造函数中查找-->
3:对象的原型查找-->
4:构造函数的原型中找-->
5:当前原型的原型中查找
4,原型链是什么? 就是把原型串联起来
5,原型链的最顶端是null
var const let 三者的区别
var 存在变量提升,而 const 和 let 不存在变量提升
let 不能重复定义,关键字允许值得修改
const 不能重复定义,关键字不允许值得修改
//1,new Set
let arr = [1,1,2,2,3,5,4,3]
// console.log([...new Set(arr)])
function unique(arr){
return [...new Set(arr)]
}
console.log( unique(arr))
//2,indexOf
let arr1 = [1, 1, 2, 2, 3, 5, 4, 3]
function unique(arr){
let brr = []
for(let i=0;i<arr.length;i++){
if(brr.indexOf(arr[i])== -1){
brr.push(arr[i])
}
}
return brr
}
console.log(unique(arr1))