用js给Loader方法编写一个load属性,load属性也是一个方法。load属性具有dom与apps两个参数。dom是HTML节点,apps是一个数组,内部是许多对象。 编写load方法,首先将apps中的对象根据name属性建立一个名为“app_map”类型为Map的属性,使得后续可以通过name找到相应的app。 其次获得dom参数(HTML中的DOM节点)之后如果遇到通用的HTML标签则使用MakeApp方法(无参数)创建一个app实例, 如果遇到的是自定义的HTML标签则在app_map中查找到相应的app_message,然后使用MakeApp方法(参数为app_message)创建一个app实例, 如果未在app_map中找到相应的app_message则报错。 遍历dom的直接子节点(不包括孙子节点)递归调用load方法,参数为dom的直接子节点,并将load的返回值加入到创建完成的app的children数组中。 与此同时将load返回的对象的father设置为刚才创建的app。完成遍历之后将创建的app返回。
时间: 2024-01-21 09:20:20 浏览: 80
DHTML文档帮助,可查询dom对象,html的对象,方法等。编写js代码的常用工具。
5星 · 资源好评率100%
好的,您的问题很清楚,我会按照您的要求回答。下面是我的解答:
在JS中编写一个load属性,它是一个方法。load属性包含dom和apps两个参数。dom是HTML节点,apps是一个数组,里面有多个对象。要编写load方法,首先需要在apps数组中根据对象名称(name属性)创建一个名为“app_map”的 Map 属性,这样在后续的操作中就可以通过名称查找相应的对象。接下来,如果遇到通用的 HTML 标签,可以使用 MakeApp 方法(无参数)创建一个 app 实例;如果遇到自定义的 HTML 标签,则在 app_map 中查找相应的 app_message,然后使用 MakeApp 方法(参数为 app_message)创建一个 app 实例;如果在 app_map 中找不到相应的 app_message,就会报错。然后,递归地遍历 dom 的直接子节点(不包括孙子节点),并将 load 方法的返回值加入到创建完成的 app 的 children 数组中。同时,将 load 返回的对象的 father 属性设置为刚刚创建的 app。遍历完成后,将创建的 app 返回。
下面是相应的代码实现:
```js
function Loader() {}
Loader.prototype.load = function (dom, apps) {
// 创建 app_map
const app_map = new Map();
for (const app of apps) {
app_map.set(app.name, app);
}
// 处理 dom 节点
if (dom.tagName) {
const app_message = app_map.get(dom.tagName.toLowerCase());
if (app_message) {
var app = this.MakeApp(app_message);
} else {
throw new Error("未找到要加载的 app");
}
} else {
var app = this.MakeApp();
}
// 处理子节点
for (const childNode of dom.children) {
const childApp = this.load(childNode, apps);
app.children.push(childApp);
childApp.father = app;
}
return app;
};
Loader.prototype.MakeApp = function (app_message) {
// 根据 app_message 和默认值创建 app 实例
// ...
return app;
};
```
希望能对您有所帮助!如果您还有其他问题,请继续提问。
阅读全文