javascript:函數的apply,call方法和length屬性

來源:互聯網
上載者:User

 看js的資料,隨手記下一些認為實用的東東,以饗和我一樣正在學習的諸位看官。
     “JavaScript 為函數對象定義了兩個方法:apply 和call,它們的作用都是將函數綁定到另外一個對象上去運行,兩者僅在定義參數的方式有所區別:
     Function.prototype.apply(thisArg,argArray); Function.prototype.call(thisArg[,arg1[,arg2…]]); 從函數原型可以看到,第一個參數都被取名為thisArg,也就是說,所有函數內部的this 指標都會被賦值為thisArg,這就達到了將函數作為另外一個對象的方法啟動並執行目的。兩個方法除了thisArg 參數,都是為Function 對象傳遞的參數。下面的代碼說明了apply 和call 方法的工作方式:"(上面這段抄自<<征服ajax>>電子書,如有著作權糾紛,請聯絡電子書作者,與本人無關)

Code
function myFuncOne() {
    this.p = "myFuncOne-";
    this.A = function(arg) {
        alert(this.p + arg);
    }
}

function myFuncTwo() {
    this.p = "myFuncTwo-";
    this.B = function(arg) {
        alert(this.p + arg);
    }
}
function test() {
    var obj1 = new myFuncOne();
    var obj2 = new myFuncTwo();
    obj1.A("testA");                       //顯示myFuncOne-testA 
    obj2.B("testB");                        //顯示myFuncTwo-testB 
    obj1.A.apply(obj2, ["testA"]);          //顯示myFuncTwo-testA,其中[ testA”]是僅有一個元素的數組
    obj2.B.apply(obj1, ["testB"]);          //顯示myFuncOne-testB,其中[ testB”]是僅有一個元素的數組
    obj1.A.call(obj2, "testA");             //顯示myFuncTwo-testA 
    obj2.B.call(obj1, "testB");             //顯示myFuncOne-testB 
}

     代碼是廉價的(Code is cheap),拷貝粘貼試一下,本人機器運行通過。
     函數對象還有一個與參數相關的屬性length,這裡看清楚了,是與“參數”相關的屬性,沒錯,字面理解,就是參數個數,不說了,看代碼:

Code
function fun1(a, b, c) {

}
function fun2(a, b) {

}
function fun3() {

}
function test() {
    for (var i = 1; i < 4; i++) {
        var len = eval(("fun" + i) + ".length");
        alert(len);
    }

    //    alert(fun1.length);
    //    alert(fun2.length);
    //    alert(fun3.length);
}

     與length屬性不同,js有一個傳遞給函數的隱含參數,arguments,它也有一個length屬性,下篇細說從頭,洗洗睡了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.