es6小语法
模板字符串
` 在这里可以写内容 ${变量名}`
模板字符串简化了字符串拼接,是js字符串拼接不在使用 + 符号连接
JavaScript继承
1.原型继承
不做过多解释直接上代码
// let fu =function(name){
// this.name =name
// }
// fu.prototype.say=function(){
// alert("你好")
// }
// let zi =function(like){
// this.like =like
// }
// zi.prototype=new fu("张三丰");
// let obj=new zi("吃人肉");
// console.log(obj)
// obj.say()
2.构造函数继承
// let fu=function(name){
// this.name=name
// }
// let zi = function(like){
// fu.call(this,"黄老斜")
// this.like=like
// }
// let a = new zi("脑瓜歪了");
// console.log(a)
JavaScript改变this指向
// 1.apply 传参的时候使用数组进行传参,
// 2.bind 传参的时候在括号外面在写一个括号,在里面传参
fn.bind (obj) (在这里写要传递的参数)
拷贝
浅拷贝
let arr = [1, 2, 3, { name: "张飞" }];
// 浅拷贝-----在改变表层数据时不会影响 newArr 但是在改变深层数据
{name :"张飞"} 时, newArr 会随之发生改变
// let newArr = [...arr];
// arr[0] = '表层改变';
// arr[3].name = "关羽";
// console.log(newArr, arr)
// 深拷贝------在拷贝之后改变 arr 之后,newArray 不在受其影响
// let newArray = JSON.parse(JSON.stringify(arr))
// arr[0] = '表层改变';
// arr[3].name = "关羽";
// console.log(arr, newArray)
深拷贝
let arr = [1, 2, 3, { name: "张飞" }];
Object.prototype.clone = function () {
// 判断调用clone()方法的调用者,如果是对象创建新对象,如果是数组
创建新数组
var o = this.constructor == Array ? [] : {}
// 循环 向数组或对象中添加数据
for (var i in this) {
// 判断添加的属性类型如果是 对象 就再次调用 clone() 方法 ,
否则就赋值
// o[i] = typeof this[i] == 'Object' ? this[i].clone()
: this[i]
if (typeof this[i] == "Object") {
o.push(this[i].clone())
} else {
o.push(this[i])
}
}
// 最后返回新的数组或对象
return o
}
let newArr = arr.clone()
console.log(newArr)
// console.log(Object.prototype