日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

QUnit源碼閱讀(1):工具函數(shù)

系統(tǒng) 1909 0

QUnit 是 JavaScript單元測試框架。更加具體的介紹ref:? http://qunitjs.com/

下面是QUnit中的一段代碼:

      (
      
        function
      
      
        () {

    
      
      
        function
      
      
         F() {}

    F.prototype 
      
      =
      
         QUnit;

    QUnit 
      
      = 
      
        new
      
      
         F();

    
      
      
        //
      
      
         Make F QUnit's constructor so that we can add to the prototype later
      
      

    QUnit.constructor =
      
         F;

}());
      
    

What does it mean? I don't know. 直接把代碼copy進(jìn)瀏覽器中進(jìn)行測試,同時(shí)定義

      QUnit =
      
         {

            add:
      
      
        function
      
      (a, b){
      
        return
      
       a+
      
        b;},

            id: 
      
      1
      
        

        };
      
    

調(diào)試后發(fā)現(xiàn):

QUnit源碼閱讀(1):工具函數(shù)

?

      
        根據(jù)元素id取得元素
        
function
id( name ) { return !!( typeof document !== "undefined" && document && document.getElementById ) && document.getElementById( name ); }

!!感嘆號(hào)的作用是什么??很顯然不同于C/C++中的連續(xù)兩次!。

他相當(dāng)于三元運(yùn)算符,返回boolean值。

      
        var
      
       ret = !!document.getElementById
    

Equals to the following:

      
        var
      
       ret = document.getElementById ? 
      
        true
      
       : 
      
        false
      
      ;
    

Other practical techniques:

      
        var
      
       num = 100
      
        ;

num 
      
      = num +""; 
      
        //
      
      
        var1+"" 轉(zhuǎn)為 string
      
      

document.write(
      
        typeof
      
       num+" : "+num+"<br/>"
      
        );

            

num 
      
      = ~~num; 
      
        //
      
      
        ~~var1 轉(zhuǎn)為 int
      
      

document.write(
      
        typeof
      
       num+" : "+num+"<br/>"
      
        );

            

num 
      
      = [num]
      
        //
      
      
        [var1] 轉(zhuǎn)為 array
      
      

document.write(
      
        typeof
      
       num+" : "+"num instanceof Array"+(num 
      
        instanceof
      
       Array)+" "+num+"<br/>");
    
      
        //
      
      
        為元素elem增加類型為type的事件,對(duì)應(yīng)的函數(shù)為fn
      
      
        

//
      
      
        兼容Firefox,chrome及IE事件
      
      
        function
      
      
         addEvent( elem, type, fn ) {

    
      
      
        if
      
      
         ( elem.addEventListener ) {

        elem.addEventListener( type, fn, 
      
      
        false
      
      
         );

    } 
      
      
        else
      
      
        if
      
      
         ( elem.attachEvent ) {

        elem.attachEvent( 
      
      "on" +
      
         type, fn );

    } 
      
      
        else
      
      
         {

        fn();

    }

}
      
    
      
        //
      
      
        把對(duì)象b中的屬性和方法導(dǎo)出到對(duì)象a中
      
      
        function
      
      
         extend( a, b ) {

    
      
      
        for
      
       ( 
      
        var
      
       prop 
      
        in
      
      
         b ) {

        
      
      
        if
      
       ( b[ prop ] ===
      
         undefined ) {

            
      
      
        delete
      
      
         a[ prop ];



        
      
      
        //
      
      
         Avoid "Member not found" error in IE8 caused by setting window.constructor
      
      

        } 
      
        else
      
      
        if
      
       ( prop !== "constructor" || a !==
      
         window ) {

            a[ prop ] 
      
      =
      
         b[ prop ];

        }

    }



    
      
      
        return
      
      
         a;

}
      
    
      
        //異常棧中取得自己想要的信息
        
//
so far supports only Firefox, Chrome and Opera (buggy), Safari (for real exceptions) // Later Safari and IE10 are supposed to support error.stack as well // See also https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error/Stack function extractStacktrace( e, offset ) { offset = offset === undefined ? 3 : offset; var stack, include, i, regex; if ( e.stacktrace ) { // Opera return e.stacktrace.split( "\n" )[ offset + 3 ]; } else if ( e.stack ) { // Firefox, Chrome stack = e.stack.split( "\n" ); if (/^error$/i.test( stack[0 ] ) ) { stack.shift(); } if ( fileName ) { include = []; for ( i = offset; i < stack.length; i++ ) { if ( stack[ i ].indexOf( fileName ) != -1 ) { break ; } include.push( stack[ i ] ); } if ( include.length ) { return include.join( "\n" ); } } return stack[ offset ]; } else if ( e.sourceURL ) { // Safari, PhantomJS // hopefully one day Safari provides actual stacktraces // exclude useless self-reference for generated Error objects if ( /qunit.js$/ .test( e.sourceURL ) ) { return ; } // for actual exceptions, this is useful return e.sourceURL + ":" + e.line; } } function sourceFromStacktrace( offset ) { try { throw new Error(); } catch ( e ) { return extractStacktrace( e, offset ); } }
      好的類型檢查實(shí)現(xiàn) 
      
// Safe object type checking is: function ( type, obj ) { return QUnit.objectType( obj ) == type; }, objectType: function ( obj ) { if ( typeof obj === "undefined" ) { return "undefined" ; // consider: typeof null === object } if ( obj === null ) { return "null" ; } var type = toString.call( obj ).match(/^\[object\s(.*)\]$/)[1] || "" ; switch ( type ) { case "Number" : if ( isNaN(obj) ) { return "nan" ; } return "number" ; case "String" : case "Boolean" : case "Array" : case "Date" : case "RegExp" : case "Function" : return type.toLowerCase(); } if ( typeof obj === "object" ) { return "object" ; } return undefined; },
       在某一元素上觸發(fā)事件
      
// Trigger an event on an element. // @example triggerEvent( document.body, "click" ); triggerEvent: function ( elem, type, event ) { if ( document.createEvent ) { event = document.createEvent( "MouseEvents" ); event.initMouseEvent(type, true , true , elem.ownerDocument.defaultView, 0, 0, 0, 0, 0, false , false , false , false , 0, null ); elem.dispatchEvent( event ); } else if ( elem.fireEvent ) { elem.fireEvent( "on" + type ); } },
      
        判斷是否在數(shù)組中存在某一元素
        
function
inArray( elem, array ) { if ( array.indexOf ) { return array.indexOf( elem ); } for ( var i = 0, length = array.length; i < length; i++ ) { if ( array[ i ] === elem ) { return i; } } return -1 ; }
      
        從元素中遞歸取得所有文本
        
function
getText( elems ) { var i, elem, ret = "" ; for ( i = 0; elems[i]; i++ ) { elem = elems[i]; // Get the text from text nodes and CDATA nodes if ( elem.nodeType === 3 || elem.nodeType === 4 ) { ret += elem.nodeValue; // Traverse everything else, except comment nodes } else if ( elem.nodeType !== 8 ) { ret += getText( elem.childNodes ); } } return ret; }

QUnit源碼閱讀(1):工具函數(shù)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 军事| 贵阳市| 霍林郭勒市| 阿巴嘎旗| 江安县| 平邑县| 鄂托克旗| 金昌市| 衡山县| 和政县| 普格县| 双柏县| 南川市| 黄浦区| 山阳县| 瓦房店市| 南汇区| 如东县| 通化县| 和林格尔县| 襄垣县| 独山县| 苗栗市| 广丰县| 长春市| 沭阳县| 建水县| 晴隆县| 青海省| 纳雍县| 井研县| 合肥市| 常熟市| 平远县| 武威市| 天台县| 常宁市| 华坪县| 黄骅市| 崇礼县| 天台县|