1.构造函数,原型对象,对象三者之间的联系
构造函数通过prototype指向原型对象 原型对象通过prototype里面的constructor指向构造函数
new出来的对象通过__propto__指向原型对象 对象和构造函数之间是 构造函数new出来的对象
原型链:由外到内进行查询,一直查询奥最顶端
2.this的指向问题
普通函数的this指向window
点击事件的this指向事件源对象
箭头函数的this指向离它最近的this
构造函数的this指向他new出来的对象
对象里面的函数指向当前的对象
注意点:构造函数中的方法的this,如果是在构造函数内部定义的方法则this指向new出来的对象.若是在proptotype上面定义的方法,则this指向window
示例代码:`function fun() {
this.a = 3;
this.actick = () => {
console.log(this);
};
}
fun.prototype.say = () => {
console.log(this);
};
var fn = new fun();
fn.say();
fn.actick();`
new的操作过程:
创建一个新的对象
给这个新的对象与prototype进行连接
把构造函数拥有的属性和方法赋予他
最后把这个对象return出去
3.浅拷贝和深拷贝
浅拷贝:只赋值值,但是仍用一个内存地址,只要一个发生变化另外一个也发生变化
深拷贝:通过递归的方法进行深度拷贝,值的赋值,也改变了内存地址
深拷贝复杂数据类型示例代码:
` var str = {
name: "张三",
age: 18,
hobby: ["打球", "做美食", "玩游戏", { name: "平安" }],
a: {
zw: "隐官",
dj: "仙人境",
},
};
var str1 = {};
function kaobei(oldArr, newArr) {
for (var key in oldArr) {
if (oldArr[key] instanceof Array) {
newArr[key] = [];
kaobei(oldArr[key], newArr[key]);
} else if (oldArr[key] instanceof Object) {
newArr[key] = {};
kaobei(oldArr[key], newArr[key]);
} else {
newArr[key] = oldArr[key];
}
}
}
kaobei(str, str1); `
4.