js编写逻辑:如果没有找到app_message则报错
时间: 2023-07-31 14:08:27 浏览: 40
这个问题需要更具体的上下文才能回答。
如果您是指在 JavaScript 中编写逻辑来检查是否存在“app_message”,并在找不到它时报错,那么您可以使用以下代码:
if (typeof app_message === 'undefined') {
throw new Error('app_message not found');
}
这将检查“app_message”是否已定义,并在未找到它时抛出一个错误。
如果您的问题与此不相关,请提供更多上下文信息,以便我能够更好地回答您的问题。
相关问题
用js给Loader方法编写一个load属性,load属性也是一个方法。load属性具有dom与apps两个参数。dom是HTML节点,apps是一个数组,内部是许多对象。 编写load方法,首先将apps中的对象根据name属性建立一个名为“app_map”类型为Map的属性,使得后续可以通过name找到相应的app。 其次获得dom参数(HTML中的DOM节点)之后遍历dom节点,如果遇到通用的HTML标签则使用MakeApp方法(无参数)创建一个app实例, 如果遇到的是自定义的HTML标签则在app_map中查找到相应的app_message,然后使用MakeApp方法(参数为app_message)创建一个app实例, 如果未在app_map中找到相应的app_message则报错。 创建完成app实例之后将其father属性设置为app_tem,如果app_tem为空则设置为undefined。 然后将app加入app_tem的children数组,设置完之后将app_tem设置为刚才创建的app。并继续遍历dom直到遍历完成全部的dom
节点。最后返回app_tem作为load方法的返回值。
具体代码如下:
```javascript
function Loader() {
this.app_map = new Map();
this.MakeApp = function(app_message) {
// 创建app实例
}
this.load = function(dom, apps) {
// 创建app_tem作为根节点
var app_tem = {
children: []
};
// 建立名为“app_map”类型为Map的属性
for (var i = 0; i < apps.length; i++) {
this.app_map.set(apps[i].name, apps[i]);
}
// 遍历dom节点
var nodes = dom.querySelectorAll('*');
for (var i = 0; i < nodes.length; i++) {
// 判断是否为自定义的HTML标签
var app_message = this.app_map.get(nodes[i].nodeName.toLowerCase());
if (!app_message) {
// 未找到相应的app_message则报错
throw new Error('Cannot find app message for node ' + nodes[i].nodeName);
}
// 创建app实例
var app = this.MakeApp(app_message);
// 设置father属性和加入children数组
if (app_tem.children.length !== 0) {
app.father = app_tem;
app_tem.children.push(app);
}
// 用当前创建的app实例替换app_tem
app_tem = app;
}
return app_tem;
};
}
// 使用方法
var loader = new Loader();
var dom = document.querySelector('body'); // 假设要加载的dom节点是body
var apps = [{name: 'my-app', ...}, {name: 'another-app', ...}]; // 假设有两个自定义HTML标签
var root_app = loader.load(dom, apps);
```
用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返回。
好的,您的问题很清楚,我会按照您的要求回答。下面是我的解答:
在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;
};
```
希望能对您有所帮助!如果您还有其他问题,请继续提问。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)