8.3随笔

每日分享

一、判断浏览器类型

?

/*

* 描述:判断浏览器信息

* 编写:LittleQiang_w

* 日期:2016.1.5

* 版本:V1.1

*/

//判断当前浏览类型

function BrowserType()

{

var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串

var isOpera = userAgent.indexOf("Opera") > -1; //判断是否Opera浏览器

var isIE = userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1 && !isOpera; //判断是否IE浏览器

var isEdge = userAgent.indexOf("Windows NT 6.1; Trident/7.0;") > -1 && !isIE; //判断是否IE的Edge浏览器

var isFF = userAgent.indexOf("Firefox") > -1; //判断是否Firefox浏览器

var isSafari = userAgent.indexOf("Safari") > -1 && userAgent.indexOf("Chrome") == -1; //判断是否Safari浏览器

var isChrome = userAgent.indexOf("Chrome") > -1 && userAgent.indexOf("Safari") > -1; //判断Chrome浏览器

if (isIE)

{

var reIE = new RegExp("MSIE (\\d+\\.\\d+);");

reIE.test(userAgent);

var fIEVersion = parseFloat(RegExp["$1"]);

if(fIEVersion == 7)

{ return "IE7";}

else if(fIEVersion == 8)

{ return "IE8";}

else if(fIEVersion == 9)

{ return "IE9";}

else if(fIEVersion == 10)

{ return "IE10";}

else if(fIEVersion == 11)

{ return "IE11";}

else

{ return "0"}//IE版本过低

}//isIE end

if (isFF) { return "FF";}

if (isOpera) { return "Opera";}

if (isSafari) { return "Safari";}

if (isChrome) { return "Chrome";}

if (isEdge) { return "Edge";}

}//myBrowser() end

//判断是否是IE浏览器

function isIE()

{

var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串

var isIE = userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1 && !isOpera; //判断是否IE浏览器

if(isIE)

{

return "1";

}

else

{

return "-1";

}

}

//判断是否是IE浏览器,包括Edge浏览器

function IEVersion()

{

var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串

var isIE = userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1 && !isOpera; //判断是否IE浏览器

var isEdge = userAgent.indexOf("Windows NT 6.1; Trident/7.0;") > -1 && !isIE; //判断是否IE的Edge浏览器

if(isIE)

{

var reIE = new RegExp("MSIE (\\d+\\.\\d+);");

reIE.test(userAgent);

var fIEVersion = parseFloat(RegExp["$1"]);

if(fIEVersion == 7)

{ return "IE7";}

else if(fIEVersion == 8)

{ return "IE8";}

else if(fIEVersion == 9)

{ return "IE9";}

else if(fIEVersion == 10)

{ return "IE10";}

else if(fIEVersion == 11)

{ return "IE11";}

else

{ return "0"}//IE版本过低

}

else if(isEdge)

{

return "Edge";

}

else

{

return "-1";//非IE

}

}

?

audio和vidio的进度条

HTML 5 <audio> 标签

属性

属性 值 描述

autoplay autoplay 如果出现该属性,则音频在就绪后马上播放。

controls controls 如果出现该属性,则向用户显示控件,比如播放按钮。

loop loop 如果出现该属性,则每当音频结束时重新开始播放。

preload preload

如果出现该属性,则音频在页面加载时进行加载,并预备播放。

如果使用 "autoplay",则忽略该属性。

src url 要播放的音频的 URL。

实例

带有浏览器默认控件的 audio 元素:

<audio controls="controls">

<source src="song.ogg" type="audio/ogg" />

<source src="song.mp3" type="audio/mpeg" />

Your browser does not support the audio element.

</audio>

HTML 5 <video> 标签

定义和用法

<video> 标签定义视频,比如电影片段或其他视频流。

属性

属性 值 描述

autoplay autoplay 如果出现该属性,则视频在就绪后马上播放。

controls controls 如果出现该属性,则向用户显示控件,比如播放按钮。

height pixels 设置视频播放器的高度。

loop loop 如果出现该属性,则当媒介文件完成播放后再次开始播放。

preload preload

如果出现该属性,则视频在页面加载时进行加载,并预备播放。

如果使用 "autoplay",则忽略该属性。

src url 要播放的视频的 URL。

width pixels 设置视频播放器的宽度。

实例

一段简单的 HTML5 视频:

<video src="movie.ogg" controls="controls">

您的浏览器不支持 video 标签。

</video>

HTML Audio/Video DOM timeupdate 事件

定义和用法

timeupdate 事件在音频/视频(audio/video)的播放位置发生改变时触发。

该事件可以在以下情况被调用:

播放音频/视频(audio/video)

移动音频/视频(audio/video)播放位置(即播放时刻点被改变,例如拖动了播放进度条)

提示: timeupdate 事件通常与 Audio/Video 对象的 currentTime 属性一起使用,该属性返回音频/视频(audio/video)的播放位置(以秒计)。

语法

HTML 中:

<audio|video ontimeupdate="myScript">尝试一下

JavaScript 中:

audio|video.ontimeupdate=function(){myScript};尝试一下

javascript 中, 使用 addEventListener() 方法:

audio|video.addEventListener("timeupdate", myScript);尝试一下

注意: Internet Explorer 8 及更早 IE 版本不支持 addEventListener() 方法。

当视频播放位置已经改变,显示视频当前播放位置(一秒计):

?

<body>

<p>该实例中,我们使用了 HTML DOM 为 video 元素添加 "ontimeupdate" 事件。

在用户开始播放视频,或者移动视频的播放位置时触发函数,并显示视频的播放位置。</p>

<video id="myVideo" width="320" height="176" controls>

<source src="mov_bbb.mp4" type="video/mp4">

<source src="mov_bbb.ogg" type="video/ogg">

您的浏览器不支持 HTML5 video 标签。

</video>

<p>播放位置: <span id="demo"></span></p>

<script>

// 获取 id="myVideo" 的 video 元素

var vid = document.getElementById("myVideo");

// 为 video 元素添加 ontimeupdate 事件,如果当前播放位置改变则执行函数

vid.ontimeupdate = function() {myFunction()};

function myFunction() {

// 显示 id="demo" 的 p 元素中视频的播放位置

document.getElementById("demo").innerHTML = vid.currentTime;

}

</script>

</body>

?

?

HTML 5 Audio/Video DOM play() 方法

定义和用法

play() 方法开始播放当前的音频或视频。

HTML 5 Audio/Video DOM pause() 方法

定义和用法

pause() 方法停止(暂停)当前播放的音频或视频。

带有播放和暂停按钮的一段视频:

?

<body>

<button onclick="playVid()" type="button">播放视频</button>

<button onclick="pauseVid()" type="button">暂停视频</button>

<br />

<br />

<video id="video1">

<source src="/example/html5/mov_bbb.mp4" type="video/mp4">

<source src="/example/html5/mov_bbb.ogg" type="video/ogg">

Your browser does not support HTML5 video.

</video>

<script>

var myVideo=document.getElementById("video1");

function playVid()

{

myVideo.play();

}

function pauseVid()

{

myVideo.pause();

}

</script>

</body>

?

?

三、在1024*768或者800*600的分辨率下可以自动调整成适用于该客户端分辨率的大小。

  第一种方法:做一个网页解决问题(长了点)

  如果只是因为浏览者改变了浏览器的设置,或者因为浏览器不兼容,使自己精心制作的网页变得"面目全非",那多令人沮丧!下面我们以网页爱好者的常用工具Dreamweaver(以下简称DW)为例,列出几个网页制作初学者较常见的网页布局问题以及解决方法,希望对初学者们有所帮助。

  一、消除任意缩放浏览器窗口对网页的影响

  一番辛苦做出来的网页,在全屏状态下浏览一切正常。但在改变浏览窗口大小之后,网页就变得"不堪入目"了,这是个很值得注意的问题。

  问题的根源还得从网页的布局说起,在DW中,网页内容的定位一般是通过表格来实现的,解决表格的问题也就成功了大半。

  大家应该注意到,在DW中表格属性面板的高宽设定选择上提供了两种不同类型:百分比和像素值。百分比的使用将会产生前面说到的那个毛病。这里所说的百分比是指表格的高或宽设置为上层标记所占区域高或宽的百分比,如在一个表格单元的宽度是600,在它里面嵌入了另外一个表格,表格宽度占表格单元的50%,则这个表格的宽度为300,依此类推,如果在一个表格不是嵌于另一个表格单元中,则其百分比是相对于当时窗口的宽度的。IE浏览器中,随便改动主页窗口的大小时,表格的内容也随之错位、变形,就是因为表格的百分比也要随着窗口的大小而改变成相应的百分比宽度。

  自然,解决这个问题的办法就是将表格宽度设置成固定宽度(也就是像素值)。另外如果外层表格已做好固定宽度设置,内层表格也可以适当使用百分比设置。清楚这个原则以后,如果出现类似的问题大家也知道怎么解决。

  二、让网页居中

  说到了窗口大小就会顺着路子想到分辨率的问题,在800×600分辨率下制作的网页在1024×768分辨率的机器上打开,整个网页就会跑到左边;1024×768分辨率的网页在800×600分辨率的机器上有时也会变得"不堪入目"。两种分辨率各做一个吧?做起来费时,看起来也费劲。怎么办呢?

  现在大多数网民都还在用800*600的分辨率,所以我们一般可以以此分辨率为主,要想让网页在1024*768时居中,只要在网页原代码的<body>后紧加一句<center>,</body>前加一句</center>就OK了。不过有几个问题这是要注意一下,第一个就是上面说到的百分比的问题,表格、单元格的宽度单位最好要使用像素单位,而不要用百分比。例如width=770。如果你的表格宽度设的是百分比,那么使用大于800×600的像素时,网页就会拉宽,这样网页可能会变形。在<body>中加入leftmargin=0,即<body leftmargin=0>这种情况下,800×600支持的表格宽度为780像素时不会出现滚动条。还有一点要注意的是不能用DW中的层来定位。

  <html>

  <head></head>

  <body topmargin=0 leftmargin=0>

  <center>

    <table cellspacing cellpadding width=760><tr><td></td></tr></table>

  </center>

  </body>

  </html>

 三、定义固定大小的文字

  大家都知道,在IE浏览器的功能设置中,有一个可以自由设置窗口内容字体大小的功能,这样由于不同访问者的设置习惯不同,呈现在他们面前的网页有时也会不不相同。比如你可能本来设计时用的是2号字体,结果由于用户对浏览器的额外设定,变的更大了,这时你的网页也可能变得"不堪入目"。虽然不是你的错,但客户是上帝。

  如果使用了网页中的CSS样式表技术,就不会出现上述情况了。使用快捷键"Shift+F11"打开样式表"CSS style"编辑器,在窗口中单击鼠标右键执行"New CSS style..."命令新建一个样式表,然后在给出的列表中选择"类型"选项,定义文字属性参数(一般文字的大小选择12px较为适宜)。完成后选择网页编辑窗中的文本,单击新的样式表名称,可以看到选中的文本发生了变化。预览时试试定义的文本字体尺寸还会不会随浏览器的选择字体大小而改变。

  四、让网页适应不同的浏览器

  浏览器的格局现在是两分天下,一分是IE,另一分是NetScape,在国内Ie有绝对的占有率,在这种情况下我们设计的网页只要兼容它就行了,但NetScape在国外还是有很多人使用,毕竟它是浏览器的元老。

  虽然没有办法做出让所有浏览器都兼容的网站,但只要注意以下几点,做出来的网页在各个浏览器都中能达到比较好的显示效果:

  不要混合使用层和表格排版,如果是父子关系,如层中表格,不在此原则范围内。

  内联式的 CSS 在 Netscape Navigator 中经常会出现问题,使用链式或内嵌式。

  有时需要在空层插入表格或者透明图片,以保证在 Netscape Navigator 里的效果。

  对于只有几个像素宽度或高度的层,改用图片来实现。

  避免使用 W3C 组织不推荐的排版属性,用 CSS 代替。

  第二种方法:做两个适合不同分辨率的页面,一个是800×600,一个是1024×768,在800×600的页面中加入一下代码就可以实现跳转了:

 

  解决分辨率问题在Dreamweaver中没有此项功能,我们只能手动加入一段JavaScript代码。首先在change-ie.html或change-nc.html页面代码中的< head>和< /head>中加入以下代码:

   < script language=javascript>

   < !--

   function redirectPage(){

   var url800x600=〃index-ie.html〃; //定义两个页面,此处假设index-ex.html和1024-ie.html同change-ie.html在同一个目录下

   var url1024x768=〃1024-ie.html〃;

   if ((screen.width==800) && (screen.height==600)) //在此处添加screen.width、screen.height的值可以检测更多的分辨率

   window.location.href= url800x600;

   else if ((screen.width==1024) && (screen.height==768))

   window.location.href=url1024x768;

   else window.location.href=url800x600;

   }

   // -->

   < /script>

   然后再在< body…>内加入onLoad=〃redirectPage()〃

   最后,同样地,在< body>和< /body>之间加入以下代码来显示网页的工作信息:

   < script language=JavaScript>

   < !--

   var w=screen.width

   var h=screen.height

   document.write(〃系统已检测到您的分辨率为:〃);

   document.write(〃< font size=3 color=red>〃);

   document.write(w+〃×〃+h);

   document.write(〃< /font>〃);

   document.write(〃正在进入页面转换,请稍候…〃);

   // -->

   < /script>

判断读者浏览器类型和屏幕分辨率,自动调用不同CSS

我们在设计网页的时候一个比较头痛的问题是究竟我们的浏览者的分辨率是多少?如果使我们的浏览者能够更好的去浏览到我的网页,这个是我们设计前必须思考的问题。所以Leying在设计网页的时候第一个想的是兼容现在大多数浏览者的屏幕分辨率,这里头有几种最常用的方法:

1、硬行把网页先用表格框起来,框的分辨率应该是在760-780象素,其余的空间可以给一个背景图或者空白.

2、用自动缩放的方法也可以实现,这种方法比较古老,而且很简单,这个不多说了;

3、用自动判断的方法。

今天,就第三种方法来说说,如何来判断出浏览者的屏幕分辨率,根据不同的分辨率给予读者不同的浏览内容:

网络上也有一些能自动判断出你的浏览器是什么类型或者什么版本的代码,集成过来。

一、既判断分辨率,也判断浏览器,使之成为判断浏览器类型屏幕分辨率自动调用不同CSS的代码。

<SCRIPT LANGUAGE="JavaScript">

<!--

if (window.navigator.userAgent.indexOf("MSIE")>=1)

{

var IE1024="";

var IE800="";

var IE1152="";

var IEother="";

ScreenWidth(IE1024,IE800,IE1152,IEother)

}else{

if (window.navigator.userAgent.indexOf("Firefox")>=1)

{

//如果浏览器为Firefox

var Firefox1024="";

var Firefox800="";

var Firefox1152="";

var Firefoxother="";

ScreenWidth(Firefox1024,Firefox800,Firefox1152,Firefoxother)

}else{

//如果浏览器为其他

var Other1024="";

var Other800="";

var Other1152="";

var Otherother="";

ScreenWidth(Other1024,Other800,Other1152,Otherother)

}

}

function ScreenWidth(CSS1,CSS2,CSS3,CSS4){

if ((screen.width == 1024) && (screen.height == 768)){

setActiveStyleSheet(CSS1);

}else{

if ((screen.width == 800) && (screen.height == 600)){

setActiveStyleSheet(CSS2);

}else{

if ((screen.width == 1152) && (screen.height == 864)){

setActiveStyleSheet(CSS3);

}else{

setActiveStyleSheet(CSS4);

}}}

}

function setActiveStyleSheet(title){

document.getElementsByTagName("link")[0].href="style/"+title;

}

//-->

</SCRIPT>

为了大家明白,这里简单解析一下:

? 引用内容

var IE1024="";

var IE800="";

var IE1152="";

var IEother="";

引号里面分别填写,用户使用IE的时候并且分辨率为1024*768,800*600,1152*864要使用的css文件名。

var Firefox1024="";

var Firefox800="";

var Firefox1152="";

var Firefoxother="";

引号里面分别填写,用户使用FireFox(一个也很流行的浏览器)的时候并且分辨率为1024*768,800*600,1152*864要使用的css文件名。

var Other1024="";

var Other800="";

var Other1152="";

var Otherother="";

引号里面分别填写,用户使用其他浏览器的时候并且分辨率为1024*768,800*600,1152*864要使用的css文件名。

二、不判断分辨率,只判断浏览器实现根据浏览器类型自动调用不同CSS。

<SCRIPT LANGUAGE="JavaScript">

<!--

if (window.navigator.userAgent.indexOf("MSIE")>=1)

{

//如果浏览器为IE

setActiveStyleSheet("default.css");

}else{

if (window.navigator.userAgent.indexOf("Firefox")>=1)

{

//如果浏览器为Firefox

setActiveStyleSheet("default2.css");

}else{

//如果浏览器为其他

setActiveStyleSheet("newsky.css");

}

}

function setActiveStyleSheet(title){

document.getElementsByTagName("link")[0].href="style/"+title;

}

//-->

</SCRIPT>

解释:(和前面的差不多)

如果浏览器为IE,则调用default.css

如果浏览器为Firefox,则调用default2.css

如果浏览器为其他,则调用newsky.css

使用方法:

很简单,放在 “</head>” 前面即可。

页面在不同屏幕分辨率下存在的问题及解决办法

(未考虑800*600或更低分辨率的情况)

一 问题

在不同分辨率下,页面布局存在不同程度的差异,特别是页面上的表单控件,其宽度默认是固定值“width:150px”,当分辨率较高时,表格中的空白显得过多,页面布局显得很不协调,在宽屏显示器上尤为明显。

二 解决办法

方法1. 为不同分辨率单独做样式文件,在页面头部用js判断分辨率后动态加载定义好的样式文件。样式文件命名格式如:forms[_屏幕宽度].css,样式文件中只需重新定义文本框和下拉框的宽度即可。

在包含的头文件headr.inc中加入js代码:

if(screen.width > 1024){

document.write(‘<link rel="stylesheet" type="text/css" href="${path}/nrmus/etc/css/forms_‘+ screen.width +‘.css">‘);

}

forms_1280.css文件内容:

/* 分辨率宽度为1280的时候,文本框和下拉框的宽度属性(width)单独定义

* 参考计算方法为:(分辨率宽度-174)/4 * 0.7

* 左侧菜单栏宽度为174px;右侧页面表格是4列;控件宽度为单元格的70%

* (1280-174)/4*0.7 = 193

*/

input.text

{

background:#FFFFFF;

border:1px solid #B5B8C8;

padding:3px 3px;

height:22px;

line-height:18px;

vertical-align:middle;

padding-bottom:0pt;

padding-top:2px;

width: 193px;

color: #333;

}

select.select{

width: 193px;

}

优点:实现很简单,代码量少;并且可针对不同分辨率做更细粒度的页面控制。

缺点:无明显缺点。

方法2 将整个页面的宽度设置为固定值,并使其居中显示。

优点:可以很大程度的消除不同分辨率下的显示差异。

缺点:分辨率宽度大于这个固定值的时候,页面两边会出现空白。

方法3 用js判断分辨率,修改body的zoom属性(IE特性),即可实现对整个页面进行缩放,类似IE8或其它浏览器提供的缩放功能。

优点:实现简单,页面能进行缩放。

缺点:缩放是宽度和高度的等比缩放,高分辨率下字体、图片看起来会变小,问题解决的不彻底。

时间: 2024-10-23 08:45:02

8.3随笔的相关文章

C#博客随笔之六:数据绑定

这一篇随笔记录的是在完成程序中遇到的一些情况 首先要讲的是MVVM 所谓MVVM就是Model,View,ViewModel 下面是MVVM的优点(引用自百度百科): MVVM模式和MVC模式一样,主要目的是分离视图(View)和模型(Model),有几大优点1. 低耦合.视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的"View"上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变.2. 可重用性.你可以把一些视图

Abby&#39;s 学习php5随笔

2017.6.27 Abby's cakephp2 学习之旅 下载了XAMPP集成开发环境,然后配置其数据库,参考学习教程, 1.建立表单. 配置完信息如下,Cache Apache默认在windows下是system用户,所以权限最高,但xampp集成环境中的apache确是administor 如何更改apache用户为system 静默开发.(一种开发方法,番茄ToDo中的学霸模式有些相似) 如何设置.ctp的显示 http://cakephp2.local/posts/index怎么就可

java基础随笔 字符数据类型char的单引号

public class Love{ public static void main(String[] args){ System.out.println('*'+'\t'+'*'); System.out.println("*"+"\t"+"*") } } 运行结果   第一行为  93 第二行为  *        * 原因 第一行中'\t' 单引号  识别为字符数据类型char,char类型是可以运算的,在第一行中+做了运算符. 第二行&q

web前端学习随笔

好好算下来,学习web前端已有半个月了,这半个月来主要学习的是HTML和CSS部分,期间有困惑,也有解决困惑时的快感,所以想把这段时间感受到的一些东西记下来,因为内容比较杂,所以干脆叫随笔吧.这里面不会说前端的相关基础知识,只是说一些自己对前端的一些认识. html是用来控制页面结构的我曾经对这句话有过疑问,觉得html应该是控制页面内容的,为什么要说是控制页面结构的呢?在查看京东首页的代码时,我恍然大悟,html确实是定义页面内容的,但同时它也要控制页面的结构.举例来说,京东商品分类的div包

JavaWeb学习随笔

Servlet学习随笔 1.HttpServlet init(ServletConfig)------Servlet生命周期中的初始方法,默认情况是服务器创建后第一次访问这个Servlet时调用,可以修改配置信息,使其在服务器一创建时就被调用; 修改配置信息的方法-----在web.xml的<servlet>下添加<load-on-startup>x<load-on-startup>,x是正整数,越小表示优先级越高 url路径的配置,完全匹配>目录匹配>(.

想知道博客园随笔总阅读量吗?

我真的是闲的无聊了...,前提是你写的随笔总数少于等于40条. 0.在选项里设置一页显示40条随笔 1,打开自己的随笔列表:https://i.cnblogs.com/posts 2,在当前页面f12打开浏览器控制台 3,粘贴进去以下代码 var trs=document.querySelectorAll('#post_list tr td:nth-child(4)')//取得阅读量 atrs=Array.from?Array.from(trs):Array.prototype.slice.ca

随笔1104

随笔1104 一.变量定义 var a = 10; 如果定义小数或整数的变量,等号后面值直接写 如果定义字符串的变量,等号后面的值要加双引号或单引号 类型转换 parseInt(); 强制转换为整数 parseFloat();强制转换为小数 二.运算符表达式 1.数学运算符 + - * / % 百分号是取余 例:alert(a+b); alert(a%b); a除以b的余数 2.逻辑运算符 && 并 指两者都满足 || 或 指两者其中任何一个满足 ! 非 指强制变反 真变假 假变真 3.比

alpha发布(技术随笔)

昨天是班级里面每个小组要进行alpha演示,大家都很努力的去做自己的项目.我们nice!组没有演示自己的项目,只一点很惭愧,身为组员没有协助组长按时完成项目,这一点自己也感觉很抱歉,虽然每天感觉自己都有去做,但是效果非常不理想.看到天天向上组的连连看界面做的很好,有背景切换,主题,游戏的级别等做的很细心.先锋组的俄罗斯方块也不错,看到同学玩的那么开心就知道了,还有飞天小女警的礼物挑选真的很用心,这个idea就很新颖,而且完成的也很好,老师也说如果转换成手机app那就更方便使用了,市场很好. 这次

设计模式学习随笔

策略模式随笔 设计模式是解决某些问题的通用解决方案:这些模式不是代码而是一种类似经验的方法. 设计模式中最好的方法就是实践中尝试套用这些模式,让以后的程序在使用中变的更加容易维护,扩展,变化,复杂. OO是设计原则,设计模式是具体的方法和工具. 策略模式的原理: 模拟鸭子的游戏: 面向对象中设计这个鸭子的超类和扩展类: public abstract class Duck{ public Duck(){ } public void Quack(){ System.out.println("~~g

C++随笔:.NET CoreCLR之GC探索(4)

今天继续来 带大家讲解CoreCLR之GC,首先我们继续看这个GCSample,这篇文章是上一篇文章的继续,如果有不清楚的,还请翻到我写的上一篇随笔.下面我们继续: // Initialize free object methodtable. The GC uses a special array-like methodtable as placeholder // for collected free space. // //初始化释放器(对象方法表),<-不知道翻译得对不对. //GC使用一