这里我是看p牛的文章来进行学习的,所以下面的内容也是根据p牛的文章来写一点自己的见解

image-20230316193813743

这里p牛进行了总结,可以根据p牛写的这个代码来进行理解

1
2
3
4
5
6
7
8
9
10
function Foo() {
this.bar = 1
}

Foo.prototype.show = function show() {
console.log(this.bar)
}

let foo = new Foo()
foo.show()

这里就是在Foo类用了prototype后,那么接下来实例化Foo类的对象,将会有Foo类里面的属性和方法。

再给一个代码来进行理解上面写的解释

1
2
3
4
5
6
7
8
9
10
11
12
13
function Father() {
this.first_name = 'Donald'
this.last_name = 'Trump'
}

function Son() {
this.first_name = 'Melania'
}

Son.prototype = new Father()

let son = new Son()
console.log(`Name: ${son.first_name} ${son.last_name}`)

就是使用Son.prototype = new Father()后,这里使用了prototype,进行了实例化对象,那么接下来Son类实例化的对象都能拥有Father()类里边的属性和方法

上面可能就是看p牛文章时会疑惑的点

image-20230316195653525

这是p牛总结的

p牛写的代码

1
2
3
4
5
6
7
8
9
function merge(target, source) {
for (let key in source) {
if (key in source && key in target) {
merge(target[key], source[key])
} else {
target[key] = source[key]
}
}
}

这个函数的作用是将两个对象(targetsource)进行合并,返回合并后的 target 对象。具体来说,它会将 source 对象中的属性递归地合并到 target 对象中,如果某个属性在 source 对象中存在但在 target 对象中不存在,则直接将该属性赋值给 target 对象。

这个函数通过使用 for...in 循环遍历 source 对象中的每一个属性,然后使用 if 语句判断该属性是否同时存在于 sourcetarget 对象中。如果是,则递归调用 merge 函数,将 source 对象中对应的属性合并到 target 对象中对应的属性上;如果不是,则直接将该属性赋值给 target 对象。

这是对上面的代码的解释