function _extends(d, b) {
for (var p in b) {
if (b.hasOwnProperty(p)) {
d[p] = b[p];
}
}
function __() {
this.constructor = d;
}
__.prototype = b.prototype;
d.prototype = new __();
}
在别的代码库里面发现的代码,用来实现 js 的 oo ,但是对于 js 的 prototype 实在是不懂,有大神给讲讲实现的逻辑么,非常感谢!
1
jearyvon 2023-01-31 18:10:04 +08:00
|
2
fason1995 2023-01-31 18:13:26 +08:00
js 有原型链的概念,即从自身找不到,会一直向祖先中查找,一直找到 null 为止,你可以先简单的理解为,把 b 设置为 d 的爸爸了,这样在 d 找不到,自然会找到 b 中,那 d 就可以用 b 的方法了
其中那段 for 循环的含义是将 b 自身属性复制到 d |
3
hahaFck OP @fason1995 那加这个 b.hasOwnProperty(p)判断是为什么呢,不应该直接将 b 的属性都赋给 d ,加这个判断感觉好像是,d 和 b 都有的属性,才会赋值。
|
6
hahaFck OP |
7
defunct9 2023-02-01 07:13:05 +08:00 via iPhone
new
|