js 模板方法模式

本文介绍了一种使用JavaScript实现的模板方法模式案例。该模式通过定义一个骨架算法,并将某些步骤留给子类实现,展示了如何创建可复用的导航条HTML代码。文章包括了基本的Nav构造函数以及两个扩展类NumNav和LinkNav的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模板方法模式:父类中定义一组操作算法骨架,而将一些实现步骤延迟到子类中。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<div id="content"></div>
<script>
    function formateString(str, data) {
        return str.replace(/\{#(\w+)#\}/g, function (match, key) {
            return typeof data[key] === undefined ? '' : data[key]
        });
    }
    var Nav = function (data) {
        this.item = '<a href="{#href#}" title="{#title#}">{#name#}</a>';
        this.html = '';
        for (var i = 0, len = data.length; i < len; i++) {
            this.html +=formateString(this.item, data[i]);
        }
        return this.html;
    }
    var NumNav = function (data) {
        var tpl = '<b>{#num#}</b>';
        for (var i = data.length - 1; i >= 0; i--) {
            data[i].name = data[i].name + formateString(tpl, data[i]);
        }
        return Nav.call(this, data);
    }
    var LinkNav = function (data) {
        var tpl = '<span>{#link#}</span>';
        for (var i = data.length - 1; i >= 0; i--) {
            data[i].name = data[i].name + formateString(tpl, data[i]);
        }
        return Nav.call(this, data);
    }
    var nav = document.getElementById('content');
    nav.innerHTML = NumNav([{
        href: 'https://www.baidu.com/',
        title: '百度一下,你就知道',
        name: '百度',
        num: '10'
    }, {
        href:'http://www.qq.com/',
        title:'腾讯首页',
        name:'腾讯',
        num:'2'
    }, {
        href : 'http://www.taobao.com/',
        title:'淘宝商城',
        name:'淘宝',
        num:'3'
    }]);
</script>
</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值