1.源码截图
- getObjectByProperty方法使用了递归
- getObjectById方法和getObjectByProperty方法都是基于getObjectByProperty方法,所以获取物体的核心方法就是getObjectByProperty
2.代码测试
稍作修改: 把源码中的this改成为多传递一个参数,方便测试,因为本地不是面向对象的写法,源码中是面向对象的写法
// 该方法使用了递归
function getObjectByProperty(obj, name, value) {
if (obj[name] === value) {
// 如果有匹配的, 都会走到这里来
return obj;
}
for (let i = 0, l = obj.children.length; i < l; i++) {
const child = obj.children[i];
const object = getObjectByProperty(child, name, value);
if (object !== undefined) {
return object;
}
}
return undefined;
}
3.测试
const res = getObjectByProperty(scene, 'name', 'mySphere')
4.核心代码说明
5.总结
- 递归的使用
- 学会阅读源码,学习别人的编码思想