原型与原型链
在 JavaScript 中,原型模式主要通过原型链实现
每个对象都有一个原型对象proto
,它可以通过__proto__
属性或Object.getPrototypeOf()
方法来访问。原型对象本身也是一个对象,它可以有自己的属性和方法
当一个对象访问一个属性或方法时,JavaScript 会首先在该对象本身查找,如果找不到,则会沿着原型链向上查找,直到找到该属性或方法为止。如果在原型链的顶端仍然找不到该属性或方法,则返回undefined
。
js实现深拷贝
json的方法
//1.运用JSON.stringify()和JSON.parse()const liLei = {name: 'lilei',age: 28,habits: ['coding', 'hiking', 'running']}console.log(liLei);//将原始数据转成JSON字符串const liLeiStr = JSON.stringify(liLei)console.log(liLeiStr);//将JSON字符串解析成对象const liLeiCopy = JSON.parse(liLeiStr)liLeiCopy.habits.push('swimming')console.log(liLeiCopy);console.log(liLeiCopy == liLei); //false
递归
//2.运用递归function deepClone(obj) {//递归终止条件 : 不是对象,为空if(typeof obj !== 'object' || obj === null) {return obj}let res={}if(Array.isArray(obj)){res=[]}for(const e of Object.keys(obj)) {res[e] = deepClone(obj[e])}return res}let newLiLei = deepClone(liLei)console.log(newLiLei == liLei); //falsenewLiLei.habits.push('swimming')//成功拷贝,原对象与拷贝对象互不影响console.log('李雷副本的habits数组是', newLiLei.habits)console.log('李雷的habits数组是', liLei.habits)