zoukankan      html  css  js  c++  java
  • 面向对象js原型模式实例解析

          首先原型模式是设计模式的一种,它的定义是:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。Prototype原型模式是一种创建型设计模式,Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建,javascript中的原型模式个人总结现在主要有3种,1、基础原型模式、2、构造函数+基础原型模式(混合模式)、3、动态原型模式,在这里把这3种的优缺点简单介绍一下:模式1优点是共享实例,缺点也是因为共享引起的,例如属性,实例1中改变了属性值,实例2中发现也改变了;模式2就弥补了模式1的缺点;模式3的优点是把构造函数和原型封装到了一起,我这个例子用的是模式2混合原型模式,这个现在用的比较普及。

         这里用一个通知公告的例子来演示一下,首先我们看一下运行界面,见下图: 

    通知公告

    主要是用div+css+js实现了一个通知框,可以动态切换标签,界面代码如下:

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TabChange.aspx.cs" Inherits="BSTest.CommonControls.TabChange.TabChange" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">
        <title>标签切换通用页面</title>
        <script src="http://www.cnblogs.com/FieldVarify/jquery-1.4.2.js" type="text/javascript"></script>
        <link href="http://www.cnblogs.com/css/Common.css" rel="stylesheet" type="text/css" />
        <link href="http://www.cnblogs.com/css/Global.css" rel="stylesheet" type="text/css" />
        <script src="TabChange.js" type="text/javascript"></script>
        <script language="javascript" type="text/javascript">
            // 在DOM加载完成时运行
             $(document).ready(function() {
                 // 调用TabChange
                 var nc = new TabChange.NConstructor("tab-hd");
                 TabChange.tab_class = "tab-hd";
                 TabChange.content_class = "tab-pal";
                 // 执行初始化
                 nc.InitTab();
             })
        </script>
    
    </head>
    <body>
        <form id="form1" runat="server">
        <div id="J_TabChange" class="notice">
            <div class="tab-hd" id="tab-hd">
                <ul>
                    <li class="tab-cur"><a href="#">通知</a> </li>
                    <li><a href="#">公示</a> </li>
                    <li><a href="#">新闻</a> </li>
                </ul>
            </div>
            <div class="tab-bd" >
                <div class="tab-pal">
                    <ul>
                        <li><a class="h" href="http://bbs.taobao.com/catalog/thread/508895-258173759.htm?spm=1.187232.221027.1">
                            人民日报:电商助成长</a> </li>
                        <li><a href="http://bbs.taobao.com/catalog/thread/508895-258182536.htm?spm=1.187232.221027.2">
                            网店为拉顾客写"情书"</a> </li>
                        <li><a href="http://bbs.taobao.com/catalog/thread/508895-258180776.htm?spm=1.187232.221027.3">
                            探访中国淘宝第一村</a> </li>
                        <li><a href="http://bbs.taobao.com/catalog/thread/508895-258139005.htm?spm=1.187232.221027.4">
                            阿里反腐交出首份答卷</a> </li>
                    </ul>
                    <!--end-->
                </div>
                <div style="display: none" class="tab-pal">
                    <ul>
                        <li><span>[<a href="http://info.rule.taobao.com/list/1602/1.php?spm=1.187233.221032.1">公告</a>]</span>
                            <a href="http://info.rule.taobao.com/detail/2012/06/25/629157/1.php?spm=1.187233.221032.2">
                                如何进聚划算</a> </li>
                        <li><span>[<a href="http://bbs.taobao.com/catalog/11396510.htm?spm=1.187233.221032.3">论坛</a>]</span>
                            <a href="http://bbs.taobao.com/catalog/thread/15296510-257804147.htm?spm=1.187233.221032.4">
                                天猫商家发票</a> </li>
                        <li><span>[<a href="http://bbs.taobao.com/catalog/11396510.htm?spm=1.187233.221032.5">论坛</a>]</span>
                            <a href="http://bbs.taobao.com/catalog/thread/15296510-257384594.htm?spm=1.187233.221032.6">
                                商品发布规则</a> </li>
                        <li><span>[<a href="http://bbs.taobao.com/catalog/11396510.htm?spm=1.187233.221032.7">论坛</a>]</span>
                            <a class="h" href="http://bbs.taobao.com/catalog/thread/15296510-257963810.htm?spm=1.187233.221032.8">
                                如何设置运费</a> </li>
                    </ul>
                    <!--end-->
                </div>
                <div style="display: none" class="tab-pal">
                    <ul>
                        <li><span>[<a href="http://info.rule.taobao.com/list/1602/1.php?spm=1.187233.221032.1">公告</a>]</span>
                            <a href="http://info.rule.taobao.com/detail/2012/06/25/629157/1.php?spm=1.187233.221032.2">
                                如何进聚划算3</a> </li>
                        <li><span>[<a href="http://bbs.taobao.com/catalog/11396510.htm?spm=1.187233.221032.3">论坛</a>]</span>
                            <a href="http://bbs.taobao.com/catalog/thread/15296510-257804147.htm?spm=1.187233.221032.4">
                                天猫商家发票3</a> </li>
                        <li><span>[<a href="http://bbs.taobao.com/catalog/11396510.htm?spm=1.187233.221032.5">论坛</a>]</span>
                            <a href="http://bbs.taobao.com/catalog/thread/15296510-257384594.htm?spm=1.187233.221032.6">
                                商品发布规则3</a> </li>
                        <li><span>[<a href="http://bbs.taobao.com/catalog/11396510.htm?spm=1.187233.221032.7">论坛</a>]</span>
                            <a class="h" href="http://bbs.taobao.com/catalog/thread/15296510-257963810.htm?spm=1.187233.221032.8">
                                如何设置运费3</a> </li>
                    </ul>
                    <!--end-->
                </div>
            </div>
        </div>
        </form>
    </body>
    </html>

    脚本文件如下:

    /*功能:面向对象标签切换
    * 调用方式:
    * // 在DOM加载完成时运行
    $(document).ready(function() {
    // 调用TabChange
    var nc = new TabChange.NConstructor("tab-hd");
    TabChange.tab_class = "tab-hd"; // 标签选中样式
    TabChange.content_class = "tab-pal"; // div内容样式
    // 执行初始化
    nc.InitTab();
    })
    * 作者:limq
    * 日期:2012.07.10
    */
    var TabChange = new Object();
    // 构造函数
    TabChange.NConstructor = function(className) {
        this.className = className;
    }
    TabChange.tab_class = "tab-hd";        // 切换标签样式名称
    TabChange.content_class = "tab-pal";   // 切换内容样式名称
    // 原型方法
    TabChange.NConstructor.prototype =
     {
         // 改变li样式
         ChangeTab: function(val) {
             $("." + TabChange.tab_class + " li").each(
                                function(i, vaul) {
                                    vaul.className = "";
                                });
             val.className = "tab-cur";
         },
         // 改变标签内显示内容
         ChangeContent: function(val) {
             $("." + TabChange.content_class + "").each(function(i, vaul) {
                 vaul.style.display = "none";
             });
             val.style.display = "block";
         },
         // 初始化标签
         InitTab: function() {
             // 得到样式名称为tab-hd集合并循环
             var tabs = $("." + TabChange.content_class);
             $("." + this.className + " li").each(
                        function(i, val) {
                            // 给每一个li加入mouseover事件
                            $(val).bind({
                                mouseover: function() {
                                    TabChange.NConstructor.prototype.ChangeTab(val);
                                    TabChange.NConstructor.prototype.ChangeContent(tabs[i]);
                                }
                            }
                            );
                        }
                     );
         }
    
     }      
  • 相关阅读:
    jquery 总体架构
    字符串字典排序
    浏览器渲染原理
    TCP/IP协议网络模型
    web
    js 继承
    js 模块化
    动画 球
    css z-index
    验证用户是否已经登录和自动登录
  • 原文地址:https://www.cnblogs.com/limengqiang/p/jsprototype.html
Copyright © 2011-2022 走看看