Javascript常用收集

comeontony發表於2011-10-30

1. javascript的with

 

當你有一個物件的多個屬性或者方法需要操作時,就可以使用with簡化程式碼操作
<script type="text/javascript">
var o=document.createElement("div");
with(o){
    style.cursor="pointer";
    style.zIndex="100";
    innerHTML="aaaa";
}
document.body.appendChild(o);
</script>
 
2.  JavaScript中的arguments, callee, caller 





原文來自http://www.cnblogs.com/jyzjh/articles/1374851.html

 

javascript中函式的隱含引數: arguments  

Arguments該物件代表正在執行的函式和呼叫它的函式的引數。[function.]arguments[n]引數

function:選項。當前正在執行的 Function 物件的名字。 
n :選項。要傳遞給 Function 物件的從0開始的引數值索引。說明Arguments是進行函式呼叫時,除了指定的引數外,還另外建立的一個隱藏物件。

 

caller
返回一個對函式的引用,該函式呼叫了當前函式。
    functionName.caller 
    functionName 物件是所執行函式的名稱。
說明
對於函式來說,caller屬性只有在函式執行時才有定義。如果函式是由頂層呼叫的,那麼 caller包含的就是 null 。如果在字串上下文中使用 caller屬性,那麼結果和 functionName.toString 一樣,也就是說,顯示的是函式的反編譯文字。

 

callee    返回正被執行的 Function 物件,也就是所指定的 Function 物件的正文。[function.]arguments.callee可選項 function引數是當前正在執行的 Function物件的名稱。說明callee屬性的初始值就是正被執行的 Function 物件。callee屬性是 arguments 物件的一個成員,它表示對函式物件本身的引用,這有利於匿名
函式的遞迴或者保證函式的封裝性,例如下邊示例的遞迴計算1到n的自然數之和。而該屬性
僅當相關函式正在執行時才可用。還有需要注意的是callee擁有length屬性,這個屬性有時候
用於驗證還是比較好的。arguments.length是實參長度,arguments.callee.length是
形參長度,由此可以判斷呼叫時形參長度是否和實參長度一致。

 

3. 獲取元素座標(隨便記錄一下大概實現方法)

jquery版本:

getOffset= function(e) {
    var to = new Object();
    var obj = $(e);
    var offset = obj.offset();
    to.left = offset.left;
    to.top = offset.top;
    to.right = offset.left + obj.width();
    to.bottom = offset.top + obj.height();
    return to;
}
 

 

js版本:

getOffset=function(o){
    var to=new Object();
    to.left=to.right=to.top=to.bottom=0;
    var twidth=o.offsetWidth;
    var theight=o.offsetHeight;
    while(o!=document.body){
        if(o.offsetParent==null){
            break;
        }
        to.left+=o.offsetLeft;
        to.top+=o.offsetTop;
        o=o.offsetParent;
    }
    to.right=to.left+twidth;
    to.bottom=to.top+theight;
    return to;
}
 

 

 

4. call 方法

呼叫一個物件的一個方法,以另一個物件替換當前物件(其實就是更改物件的內部指標,即改變物件的this指向的內容)。

 

call([thisObj[,arg1[, arg2[,   [,.argN]]]]])

 引數
thisObj
可選項。將被用作當前物件的物件。
arg1, arg2,   , argN
可選項。將被傳遞方法引數序列。
說明
call 方法可以用來代替另一個物件呼叫一個方法。call 方法可將一個函式的物件上下文從初始的上下文改變為由 thisObj 指定的新物件。如果沒有提供 thisObj 引數,那麼 Global 物件被用作 thisObj。

<input type="text" id="myText"    value="input text">
<script>
    function Obj(){this.value="物件!";}
    var value="global 變數";
    function Fun1(){alert(this.value);}

     window.Fun1();   //global 變數
     Fun1.call(window);  //global 變數
     Fun1.call(document.getElementById('myText'));  //input text
     Fun1.call(new Obj());   //物件!
</script>

 

var first_object = { 
   num: 42 
}; 
var second_object = { 
   num: 24 
}; 
function multiply(mult) { 
   return this.num * mult; 
} 
multiply.call(first_object, 5); // returns 42 * 5 
multiply.call(second_object, 5); // returns 24 * 5 
 

 

5. bind方法

<script type="text/javascript"> 
var first_object = { 
   num: 42 
}; 
var second_object = { 
   num: 24 
}; 

function multiply(mult) { 
   return this.num * mult; 
} 

Function.prototype.bind = function(obj) { 
   var method = this, 
    temp = function() { 
     return method.apply(obj, arguments); 
    }; 

   return temp; 
} 

var first_multiply = multiply.bind(first_object); 
first_multiply(5); // returns 42 * 5 

var second_multiply = multiply.bind(second_object); 
second_multiply(5); // returns 24 * 5 
</script> 

 

5. JSON.stringify以及JSON.parse

    json格式物件和字串轉換函式

var str = ' { " name " : " xskow " , " age " : 23 } ';
JSON.parse(str);

 

6. Javascript物件判斷

   比較準確的判斷如下:

 

if(obj.constructor == Array) {

         alert('這是一個陣列');

    }

    //主要型別如下:Object / Array / Function / String / Number / Boolean

 

 

相關文章