当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);

有了上面的概念基础之后,再看我们设计的菜单

代码结构:

image

源代码如下:

// 菜单添加到容器中
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;
    }
 
 
}
本文转自博客园张占岭(仓储大叔)的博客,原文链接:当JS面向对象之后续(JS在设计级联菜单时),如需转载请自行联系原博主。
目录
相关文章
|
JavaScript 前端开发 Java
深入JS面向对象(原型-继承)(三)
深入JS面向对象(原型-继承)
103 0
|
JavaScript 前端开发 Java
深入JS面向对象(原型-继承)(一)
深入JS面向对象(原型-继承)
152 0
js- 面向对象进阶
Object.defineProperty等面向对象的信息
139 0
|
存储 JavaScript 前端开发
|
设计模式 JavaScript 前端开发
【JavaScript】深入浅出JavaScript继承机制:解密原型、原型链与面向对象实战攻略
JavaScript的继承机制基于原型链,它定义了对象属性和方法的查找规则。每个对象都有一个原型,通过原型链,对象能访问到构造函数原型上的方法。例如`Animal.prototype`上的`speak`方法可被`Animal`实例访问。原型链的尽头是`Object.prototype`,其`[[Prototype]]`为`null`。继承方式包括原型链继承(通过`Object.create`)、构造函数继承(使用`call`或`apply`)和组合继承(结合两者)。ES6的`class`语法是语法糖,但底层仍基于原型。继承选择应根据需求,理解原型链原理对JavaScript面向对象编程至关重要
334 7
【JavaScript】深入浅出JavaScript继承机制:解密原型、原型链与面向对象实战攻略
|
前端开发 JavaScript
前端 JS 经典:Class 面向对象
前端 JS 经典:Class 面向对象
113 1
|
JavaScript 前端开发
JavaScript 原型链继承:掌握面向对象的基础
JavaScript 原型链继承:掌握面向对象的基础
|
JavaScript 前端开发 API
在Node.js上使用dojo库进行面向对象web应用开发
请注意,虽然这个例子在Node.js环境中使用了Dojo,但Dojo的许多功能(例如DOM操作和AJAX请求)在Node.js环境中可能无法正常工作。因此,如果你打算在Node.js环境中使用Dojo,你可能需要查找一些适用于服务器端JavaScript的替代方案。
160 0
|
存储 JSON 前端开发
JavaScript:构造函数&面向对象
JavaScript:构造函数&面向对象
109 2
|
存储 JavaScript 前端开发
【JavaScript】<面向对象Object>函数方法&对象创建&原型对象&作用域解析
【1月更文挑战第17天】【JavaScript】<面向对象Object>函数方法&对象创建&原型对象&作用域解析

热门文章

最新文章