当JS面向对象之后续(JS在设计级联菜单时)
我们在使用JS制作控件时,经常使用的方法就是建立一个function对象,然后对function的原型对象进行扩展对象的建立,这样在建立function对象的实例后,就可以访问到prototype原型所指定的新对象了.例如:
定义一个function对象
function zzl(){…}
为zzl对象建立一个原型扩展对象
zzl.prototype = {
display: function () {
alert("欢迎您");
},
property: {
name: "zzlController",
version: "1.1.0",
Isregister: true
},
showinfo: function (version) {
alert("版本:" + version);
}
}
zzl = new zzl();
zzl.showinfo(zzl.property.version);
有了上面的概念基础之后,再看我们设计的菜单
代码结构:
源代码如下:
// 菜单添加到容器中
var zzlMenuBlock = {
list: new Array(),
add: function(component) {
this.list.push(component);
},
print: function(container) {
var str = "<ul class=\"Menu\">";
for (var i = 0, len = this.list.length; i < len; i++) {
str += this.list[i].getValue();
}
document.getElementById(container).innerHTML = str + "</ul>";
}
}
// 主菜单,必须有子菜单的菜单项
function zzlMenu(text, title, href) {
this.menuComponents = new Array();
this.text = text;
this.title = title;
this.href = href;
}
// 主菜单的扩展方法
zzlMenu.prototype = {
getValue: function() {
if (this.menuComponents.length == 0) {
throw new Error(this.text + "菜单下没有子菜单");
}
var str = "<li class=\"Menu-WithChildren\" title=\"" + this.title + "\">
<a class=\"Menu-Link\" href=\"" + this.href + "\">" + this.text + "</a>";
str += "<ul>";
for (var i = 0, len = this.menuComponents.length; i < len; i++) {
str += this.menuComponents[i].getValue();
}
str += "</ul>";
return str;
},
add: function(component) {
this.menuComponents.push(component);
},
remove: function(component) {
for (var i = 0, len = this.menuComponents.length; i < len; i++) {
if (this.menuComponents[i] == component) {
this.menuComponents.splice(i, 1);
break;
}
}
},
removeAt: function(index) {
if (this.menuComponents.length <= index) {
this.menuComponents.splice(index, 1);
}
else {
throw new Error("索引操作数组超过上限");
}
}
}
// 子菜单,一定没有下级菜单
function zzlItem(text, title, href) {
this.text = text;
this.title = title;
this.href = href;
}
// 子菜单的扩展方法
zzlItem.prototype = {
getValue: function() {
var str = "<li class=\"Menu-Leaf\" title=\"" + this.title + "\">
<a href=\"" + this.href + "\">" + this.text + "</a></li>";
return str;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示