js的点点滴滴

有关于JS的东西太多,也太杂了。总是想记下来,但总是以一些自以为是的理由来搪塞自己。今天总是下了点决心,先记下这点吧。以后有了随时更新。

1、js静态类
定义方法
var classname=
{
}
成员定义方法
每个成员由逗号分隔开(除最后一个成员)
对于成员变量,通常的定义方法为:
m_varname:value
对于成员函数,通常的定义方法为:
fnname:function(parameter)
{
}

另外,在静态类,可以直接使用外部的函数或者变量。但如果要引用静态类的成员,需要指出静态类的类名,如:staticClassName.member = value;即使是在同一个静态类中。

2、使用setTimeout函数传递对象:
var expFun=function(){OperationTime.SetShowTimerInfo(obj)};
  window.setTimeout(expFun,1000);

现在我吸取网上其它大大的经验,已经将它稍稍改进了一些。重写了一下window.setTimeout函数。

var _st_fun = window.setTimeout;
window.setTimeout 
=function(fRef,mDelay){
    
if(typeof fRef == 'function'){
        
var context = this;
        
var argus = Array.prototype.splice.call(arguments,2);
        
var fun=function(){
            fRef.apply(context,argus);
        }

        
return _st_fun(fun,mDelay);
    }

    
return _st_fun(fRef,mDelay);
}
调用的时候,直接将要传递的参数按顺序放在参数列表中即可。

window.setTimeout的原型

iTimerID = window.setTimeout(vCode, iMilliSeconds [, sLanguage])

一般情况下,第三个参数(语言)没有什么用处,默认是javascript,所以在重载的时候将它放弃了。

调用如下:

var dealyinvoke=function(matchError)
{
    
this.processError(matchError);
}

var obj = this;
window.setTimeout.call(obj,dealyinvoke,parseInt(matchError.Try[
0].Time)*1000,matchError);

这是我的程序里面使用到的一个调用示例。由于我是面向对象编程,这个processError函数是当前对象中的一个成员。所以在回调中,我还是需要当前上下文的引用,所以使用的call来完成的调用。第一个参数将当前上下文通过call传递进去(如果对call或者apply的使用不明白,说明你和我一样,功力还欠缺火候,赶快补习一下)

当前也可以直接调用的,就如没有重写一样。如果回调函数中不需要上下文,可以直接调用。如下:

var dealyinvoke=function(matchError)
{
   
processError(matchError);
}


window.setTimeout(dealyinvoke,parseInt(matchError.Try[
0].Time)*1000,matchError);



3、检查Access数据表中是否存在某字段(列)

//===============================/
//
检查数据表中是否存在列
//
strTableName        表名
//
strColumnName        列名
//
=============================/
function fnColumnIsExists(tablename,columname)
{
    
var blnExists = false;
    
try
    
{
        
var rstPbase;
        rstPbase 
= g_objAnalyConn.OpenSchema(4new Array(nullnull,tablename,columname));
        blnExists 
= rstPbase.recordCount >0;
        rstPbase.Close();
        
delete rstPbase;
    }

    
catch (e)
    
{
        //showErrorInfo(
"模块名称:QuestionTimer[fnColumnIsExists]\n详细信息:" + e.description);
        
//alert(e.description);
    }

    
return blnExists;
}

上面函数中,如果把rstPbase = g_objAnalyConn.OpenSchema(4, new Array(null, null,tablename,columname));中的columname如果为null的话,那返回的数据集就是所有字段名(列名)的一个集合。当然查询语句也要作出相应的调整。


4、有关于类的创建,精妙的语法。

var Class = {
    create: 
function () {
        
return function () {
            
this.initialize.apply(this, arguments);
        }
;
    }

}
;
var StringBuilder = Class.create();
StringBuilder.prototype 
= {
    initialize : 
function( str ) {
        
this._strings_ = new Array;
        
if ( str ) this.append(str);
    }
,
    append : 
function ( str ) {
        
this._strings_.push ( str );
    }
,
    ToString : 
function () {
        
return this._strings_.join ( "" );
    }
,
    Clear : 
function () {
        
return this._strings_.splice (0,this._strings_.length);
    }

}

function classtest(){
    
var sb=new StringBuilder("ad");
}

5、Json对象
以我看来,Json和第一条提到的静态类,基本上是同一个东西,只不过静态类里面比JSON多了一些成员函数而已。它们的本质还是相同的。现在也说不清它们两者之间是先有鸡还是先有蛋的。亦或者是同时就存在了的。
var json={title:"标题",content:"内容"};
它们都是以{}为声明标记,内部以,分隔。并且每一个成员都是以:来区分名称和内容。
比如:json.title 这时,如果要调试输出的话,输出来的是字符串"标题".
同时,也可以把上面的json看作是一个静态类,只不过这个静态类,徒有虚表而已。是一个只有属性变量 ,没有成员函数的静态类。

json声明时,还可以加入数组。如下:
json={title:"标题",content:"内容",category:["章节一","Javascript","客户端脚本"]};
如果alert(json.category),输出的将是:章节一,Javascript,客户端脚本。

同时,在json内部,还可以存在json子集。如下:
var json={title:"标题",content:"内容",category:{name0:"章节一",name1:"Javascript",name2:"客户端脚本"}};
如果alert(json.category。name2),输出的将是:客户端脚本。

6、给string对象扩充的方法

String.prototype.format=function(){
    Array.prototype.unshift.call(arguments,
this);
    
return String.format.apply(null,arguments);
}

String.format 
= function(){
    
if(arguments.length == 0)return "";    
    
var str = arguments[0];
    
for(var index=0;index<arguments.length;index++){      
        
var re = new RegExp('\\{' + (index) + '\\}','gm');
        str 
= str.replace(re, arguments[index+1]);
    }

    
return str
}


原文地址:https://www.cnblogs.com/sxlfybb/p/1208193.html