当前位置:  编程技术>WEB前端
本页文章导读:
    ▪【javascript继承】之——原型链继承和类式继承      什么是继承啊?答:别人白给你的过程就叫继承。为什么要用继承呢?答:捡现成的呗。好吧,既然大家都想捡现成的,那就要学会怎么继承!在了解之前,你需要先了解构造函数、对象、原.........
    ▪ASP图片上传处理模块      <!--#i nclude FILE="Upload.inc"--> <% '----------------------------------------------------------------------- '--- 上传处理类模块 '--- Copyright (c) 2004 Aspsky, Inc. '--- Mail: Sunwin@artbbs.net http://www.aspsky.net '--- 2004-12-18.........
    ▪J2EE中十三个规范解读              J2EE是为企业级应用开发者设计的庞大工具包,对Java核心规范在大小和广度上都有巨大的扩展。是对现有和新技术的集成,可以大幅度加速应用开发。        .........

[1]【javascript继承】之——原型链继承和类式继承
    来源:    发布时间: 2013-11-06

什么是继承啊?答:别人白给你的过程就叫继承。

为什么要用继承呢?答:捡现成的呗。

好吧,既然大家都想捡现成的,那就要学会怎么继承!

在了解之前,你需要先了解构造函数、对象、原型链等概念......

JS里常用的两种继承方式:

  • 原型链继承(对象间的继承)
  • 类式继承(构造函数间的继承)
  • 原型链继承:

    //要继承的对象
    var parent={
    name : "baba"
        say : function(){
    alert("I am baba");
    }
    }

    //新对象
    var child = proInherit(parent);

    //测试
    alert(child.name); //"baba"
    child.say(); //"I am baba"

    利用proInherit(obj)方法,传入对象,就能实现对象的属性及方法的继承,这个方法不是内置方法,所以要自己定义,非常简单:

    function proInherit(obj){
    function F () {}
    F.prototype = obj;
    return new F();
    }

    其中F()为一个临时的空的构造函数,然后将F()的原型设置为父对象,但是同时它又通过受益于_proto_链接而具有其父亲对象的全部功能。

    链式图解:

             

     

    类式继承:

    //父类构造函数
    function Parent() {
    this.name = "baba";
    }
    //父类原型方法
    Parent.prototype.getName = function () {
    return this.name;
    }

    //子类构造函数
    function Child() {
    this.name = "cc";
    }

    //类式继承
    classInherit(Parent, Child);

    //实例
    var child = new Child();
    alert(child.getName()) //“baba”

    下面我们来看看这个继承的关键方法:classInherit(Parent,Child)

    var classInherit = (function () {
    var F = function () { }
    return function (P, C) {
    F.prototype = P.prototype;
    C.prototype = new F();
    C.prototype.constructor = C;
    }
    }());

     分析一下这个方法:

  • 首先创建一个空的构造函数F(),用其实例的_proto_属性来构建父类与子类的原型链。起到一个代理的作用,目的是为了防止C.prototype = P.prototype,这样会在子类实例化后修改属性或方法时候,连同父类一起修改。
  • 整体采用即时函数并且在闭包中存储F(),防止多次继承时候创建大量的空的构造函数,从而减少消耗内存。
  • 最后一行的意思是,由于原型链的关系,C的实例对象的constructor会指向P,所以重新设置。
  • 链式图解:

                

    这种方式虽然在实例的时候继承了原型方法,但是父类的属性无法继承,下面介绍一种复制继承,算是对类式继承的补充。

    复制继承:

    //复制继承
    function copyInherit(p, c) {
    var i,
    toStr = Object.prototype.toString,
    astr = "[object Array]";
    c = c || {};
    for (i in p) {
    if (p.hasOwnProperty(i)) {
    if (typeof p[i] === "object") {
    c[i] = toStr.call(p[i]) == astr ? [] : {};
    c[i] = copy(p[i], c[i]);
    }
    else {
    c[i] = p[i];
    }
    }
    }
    return c;
    }

    //重写Parent
    function Parent() {
    this.name = "pp";
    this.obj= {a:1,b:2};
    this.arr= [1, 2]
    }
    //实例
    var child = new Child();
    var parent = new Parent();
    copyInherit(parent, child);
    alert(child.name) //"baba"
    alert(child.arr) //1,2
    alert(child.obj.a) //1

     分析下copyInherit(p,c)

    当一个值赋予一个变量时候,分为传值和传引用两种方式,当你父对象内属性包含数组类型或是对象类型时候,  c[i] = toStr.call(p[i]) == astr ? [] : {};这一句会避免修改子对象属于而引起的父对象属性被篡改。

    总结:

    类式继承比较普遍,因为大家都比较熟悉这种构造函数方式,但是内存占用比较大。而原型式继承,占用内存比较小,但是包含数组,或者对象类型的克隆比较麻烦。复制继承简单,而且应用广泛。

     

     

     

     

     

    本文链接


        
    [2]ASP图片上传处理模块
        来源:    发布时间: 2013-11-06
    <!--#i nclude FILE="Upload.inc"-->
    <%
    '-----------------------------------------------------------------------
    '--- 上传处理类模块
    '--- Copyright (c) 2004 Aspsky, Inc.
    '--- Mail: Sunwin@artbbs.net http://www.aspsky.net
    '--- 2004-12-18
    '-----------------------------------------------------------------------
    '-----------------------------------------------------------------------
    '-- InceptFileType : 设置上传类型属性 (以逗号分隔多个文件类型) String
    '-- MaxSize : 设置上传文件大小上限 (单位:kb) Long
    '-- InceptMaxFile : 设置一次上传文件最大个数 Long
    '-- UploadPath : 设置保存的目录相对路径 String
    '-- UploadType : 设置上传组件类型 (0=无组件上传类,1=Aspupload3.0 ,2=SA-FileUp 4.0 ,3=DvFile.Upload V1.0)
    '-- SaveUpFile : 执行上传
    '-- GetBinary : 设置上传是否返回文件数据流 Bloon值 : True/False
    '-- ChkSessionName : 设置SESSION名,防止重复提交,SESSION名与提交的表单名要一致。
    '-- RName设置文件名 : 定义文件名前缀 (如默认生成的文件名为200412230402587123.jpg
    ' 设置:RName="PRE_",生成的文件名为:PRE_200412230402587123.jpg)
    '-----------------------------------------------------------------------
    '-- 设置图片组件属性
    '-- PreviewType : 设置组件(0=CreatePreviewImage组件,1=AspJpegV1.2 ,2=SoftArtisans ImgWriter V1.21)
    '-- PreviewImageWidth : 设置预览图片宽度
    '-- PreviewImageHeight : 设置预览图片高度
    '-- DrawImageWidth : 设置水印图片或文字区域宽度
    '-- DrawImageHeight : 设置水印图片或文字区域高度
    '-- DrawGraph : 设置水印图片或文字区域透明度
    '-- DrawFontColor : 设置水印文字颜色
    '-- DrawFontFamily : 设置水印文字字体格式
    '-- DrawFontSize : 设置水印文字字体大小
    '-- DrawFontBold : 设置水印文字是否粗体
    '-- DrawInfo : 设置水印文字信息或图片信息
    '-- DrawType : 设置加载水印模式:0=不加载水印 ,1=加载水印文字 ,2=加载水印图片
    '-- DrawXYType : 图片添加水印LOGO位置坐标:"0" =左上,"1"=左下,"2"=居中,"3"=右上,"4"=右下
    '-- DrawSizeType : 生成预览图片大小规则:"0"=固定缩小,"1"=等比例缩小
    '-----------------------------------------------------------------------
    '-- 获取上传信息
    '-- ObjName : 采用的组件名称
    '-- Count : 上传文件总数
    '-- CountSize : 上传总大小字节数
    '-- ErrCodes : 错误NUMBER (默认为0)
    '-- Description : 错误描述
    '-----------------------------------------------------------------------
    '-- CreateView Imagename,TempFilename,FileExt
    ' 创建预览图片过程: 原始文件的相对路径,生成预览文件相对路径,原文件后缀
    '-----------------------------------------------------------------------
    '-----------------------------------------------------------------------
    '-- 获取文件对象属性 : UploadFiles
    '-- FormName : 表单名称
    '-- FileName : 生成的文件名称
    '-- FilePath : 保存文件的相对路径
    '-- FileSize : 文件大小
    '-- FileContentType : ContentType文件类型
    '-- FileType : 0=其它,1=图片,2=FLASH,3=音乐,4=电影
    '-- FileData : 文件数据流 (若组件不支持直接获取,则返回Null)
    '-- FileExt : 文件后缀
    '-- FileWidth : 图片/Flash文件宽度 (其他文件默认=-1)
    '-- FileHeight : 图片/Flash文件高度 (其他文件默认=-1)
    '-----------------------------------------------------------------------
    '-----------------------------------------------------------------------
    '-- 获取表单对象属性 : UploadForms
    '-- Count : 表单数
    '-- key : 表单内容
    '-----------------------------------------------------------------------
    '-----------------------------------------------------------------------
    Class UpFile_Cls
    Private UploadObj,ImageObj
    Private FilePath,InceptFile,FileMaxSize,MaxFile,Upload_Type,FileInfo,IsBinary,SessionName
    Private Preview_Type,View_ImageWidth,View_ImageHeight,Draw_ImageWidth,Draw_ImageHeight,Draw_Graph
    Private Draw_FontColor,Draw_FontFamily,Draw_FontSize,Draw_FontBold,Draw_Info,Draw_Type,Draw_XYType,Draw_SizeType
    Private RName_Str,Transition_Color
    Public ErrCodes,ObjName,UploadFiles,UploadForms,Count,CountSize
    '-----------------------------------------------------------------------------------
    '初始化类
    '-----------------------------------------------------------------------------------
    Private Sub Class_Initialize
    SessionName = Empty
    IsBinary = False
    ErrCodes = 0
    Count = 0
    CountSize = 0
    FilePath = "./"
    InceptFile = ""
    FileMaxSize = -1
    MaxFile = 1
    Upload_Type = -1
    Preview_Type = 999
    ObjName = "未知组件"
    View_ImageWidth = 0
    View_ImageHeight = 0
    Draw_FontColor = &H000000
    Draw_FontFamily = "Arial"
    Draw_FontSize = 10
    Draw_FontBold = False
    Draw_Info = "WWW.OIOJ.NET"
    Draw_Type = -1
    Set UploadFiles = Server.CreateObject ("Scripting.Dictionary")
    Set UploadForms = Server.CreateObject ("Scripting.Dictionary")
    UploadFiles.CompareMode = 1
    UploadForms.CompareMode = 1
    End Sub

    '-----------------------------------------------------------------------------------
    '销毁类
    '-----------------------------------------------------------------------------------
    Private Sub Class_Terminate
    If IsObject(UploadObj) Then
    Set UploadObj = Nothing
    End If
    If IsObject(ImageObj) Then
    Set ImageObj = Nothing
    End If
    UploadFiles.RemoveAll
    UploadForms.RemoveAll
    Set UploadForms = Nothing
    Set UploadFiles = Nothing
    End Sub

    '-----------------------------------------------------------------------------------
    '设置上传是否返回文件数据流
    '---------
        
    [3]J2EE中十三个规范解读
        来源: 互联网  发布时间: 2013-11-06

            J2EE是为企业级应用开发者设计的庞大工具包,对Java核心规范在大小和广度上都有巨大的扩展。是对现有和新技术的集成,可以大幅度加速应用开发。

            J2EE是一个标准、规范。遵循此规范开发的应用可以做到编写一次,随处运行,实现跨平台运行。一下是这十三种规范,对于规范,我更多的以我自己目前已有的知识来解读一下。


            1.JDBC(Java Database Connectivity)

            名字都和ODBC(Open Database Connectivity)那么相像,给人的第一感觉就是他们要实现的功能差不多,但事实并非仅仅是换了一个字母那么简单。我觉得可以这样理解JDBC:是ODBC与ADO的结合体,创建连接和发送SQL只用JDBC一个就行了,而ODBC只是创建一个连接,还需要用ADO来进行数据操作。


            2.JNDI(Java Name and Directory Interface)

            名字为Java名字和路径的接口,对于这个的理解目前还不是那么深刻。部署EJB、DataSource等,为其提供一个JNDI-NAME,那么在程序中,就可以通过lookup查找这个唯一ID,就可以获得到相应的资源,而这个资源,可以不是本地文件系统中的,这就为分布式的系统打下了很好的基础。

            我感觉这个就像一个k-v对,名字为key,而value是任意对象。


            3.EJB(Enterprise Javabean)

            Javabean的任务是:一次性编写,任何地方执行,任何地方重用。Javabean分为会话Bean(无会话状态的Bean,有会话状态的Bean)、实体Bean、消息驱动Bean。

            关于实体Bean,我感觉很像三层里面的DAL+Entity。只不过,在这里,Bean可以由容器实现,也可以由Bean自己实现。由容器实现,在使用过程中,感觉很像为某个空间设置数据源,只需要通过自己选择一下,语句就可以出来。而有Bean自己控制的Bean,感觉就很像三层里面的DAL+Entiry了。

            会话Bean,可以作为三层架构中的业务逻辑层出现。而消息驱动Bean,更多的是用在了JMS(Java massage Service)中。


            4.RMI(Remote Method Invoke)

            远程方法请求。名如其实,这个是用来调用远程方法的。使用序列化的方式在客户端与服务器之间传递数据,是呗EJB使用的更底层的协议。


            5、Java IDL/CORBA(待日后深入理解)

            JavaIDL使分布式、支持Web的Java应用可以给予IIOP协议透明地调用远程服务


            6、JSP

            JSP页面由HTML代码嵌入其中Java代码组成。怎么嵌入先不管,吃饭理论,ASP学过,这里只变了一个字母,而且要达到的目的也都一样:页面展示。所以对于这个的理解不是那么难。


            7、Servlet

            其实看到这个的时候,我深深感觉到米老师对于各种语言看法的正确性了:语言其实是相同的,真正学会了一门语言,学会另一门语言真的不用多久。不知道大家还记不记得.net平台中的一般处理程序。

            我在学习AJAX的时候,看的是Java版的,里面说让建一个servlet,当时把我给愁的够呛。后来我建了一个一般处理程序,发现结构和servlet差不多,于是就把卸载servlet中的语句写在了一般处理程序中,发现正常执行了。

            所以从.net平台转过来,我觉得可以这将上面两个对应到已学的知识:Asp页面——jsp页面,servlet——一般处理程序。这样,jsp对你来说的新鲜感是不是就小了很多了。


            8.XML(Extensible Markup Language)

            扩展标记语言。这个在学习asp.net的时候,就接触过,只是到现在了,依然没有深入用过。XML是平台独立的,和Java的发展也是相互独立的。正是由于XML的平台独立,使得java的跨平台有了强力的后盾。


            9JMS(java message service)

            看了这部分,第一感觉就是,刚刚做的那个系统,如果用上这个机制,那么会更完美。

            点对点互发,消息广播。还可以这样设置:如果对方没有在线,那么消息会存在服务器,待对方上线后,发送给对方。其实这个自己新增个表,其实也可以实现,但是你不好实现的是优化,如果面对大数据量,你无法保证是否会像你使用JMS那样高效。


            10.JTA(java transaction API)

            java事务API。这点,在.net平台中也是有的(ADO事务)。事务,可以由容器控制,也可以由bean控制。

            在学习数据库的时候,第一次接触了事务这一个词,事务最简单最直接的目的就是保证数据的有效性,数据的一致性。        


            11.JavaMail

            用于存取邮件服务器的API,提供了一包邮件服务器的抽象类。不仅支持SMTP服务器,也支持IMAP服务器。


            12、13.JTA和JTS

            Java事务API和Java事务服务未J2EE平台提供了分布式事务服务。

            

            对于J2EE的理解还有待进一步的研究,下一步要通过一个项目来对J2EE的知识进行深入以及巩固。纸上学来终觉浅,在项目中成长是IT人学习的法宝。


            最后,再说一下对于三层架构的看法。忘了听谁说过,MVC不是架构,只是几个设计模式而已。可是学习的过程中,老师说了一个外观模式:业务逻辑放在会话Bean用来减小Web与实体Bean的耦合,当时看了一下,这不就是我们每天津津乐道的三层架构么。

            再发表语句对设计模式的看法:有的设计模式,是架构级别的。架构,是设计模式的体现。


    作者:jianxin1009 发表于2013-3-8 20:33:09 原文链接
    阅读:5 评论:0 查看评论

        
    最新技术文章:
    ▪css white-space:nowrap属性用法(可以强制文字不...
    ▪IE里button设置border:none属性无效解决方法
    ▪border:none与border:0使用区别
    ▪html清除浮动的6种方法示例
    ▪三个不常见的 HTML5 实用新特性简介
    ▪css代码优化的12个技巧
    ▪低版本IE正常运行HTML5+CSS3网站的3种解决方案
    ▪CSS Hack大全-教你如何区分出IE6-IE10、FireFox、Chr...
    ▪ie6,ie7,ie8完美支持position:fixed的终极解决方案
    ▪小技巧处理div内容溢出
    ▪html小技巧之td,div标签里内容不换行
    ▪纯CSS实现鼠标放上去改变文字内容
    ▪li中插入img图片间有空隙的解决方案
    ▪CSS3中Transition属性详解以及示例分享
    ▪父div高度不能自适应子div高度的解决方案
    ▪告别AJAX实现无刷新提交表单
    ▪从零学CSS系列之文本属性
    ▪HTML 标签
    ▪CSS3+Js实现响应式导航条
    ▪CSS3实例分享之多重背景的实现(Multiple background...
    ▪用css截取字符的几种方法详解(css排版隐藏溢...
    ▪页面遮罩层,并且阻止页面body滚动。bootstrap...
    ▪CSS可以做的几个令你叹为观止的实例分享
    ▪详细分析css float 属性以及position:absolute 的区...
    ▪IE6/IE7/IE8/IE9中tbody的innerHTML不能赋值的完美解...
    ▪CSS小例子(只显示下划线的文本框,像文字一...
    ▪可以给img元素设置背景图
    ▪不通过JavaScript实现的自动滚动视差效果
    ▪div+CSS 兼容小摘
    ▪CSS的inherit与auto使用分析
     


    站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3