中文字幕在线一区二区在线,久久久精品免费观看国产,无码日日模日日碰夜夜爽,天堂av在线最新版在线,日韩美精品无码一本二本三本,麻豆精品三级国产国语,精品无码AⅤ片,国产区在线观看视频

      javascript的方法

      時間:2024-08-09 22:15:52 JavaScript 我要投稿

      javascript的方法

        在javascript中,方法可以通過以下幾種方式執行:

        1.func(),這是最直接最常見的調用方式,也符合一般人的思維邏輯,但是在某些情況下有一些不足,下面會解釋。

        2.(function(arg){})(window),匿名方法調用,在構造命名空間時比較有用,后面的括號中的參數與匿名方法中的入參一一對應。

        3.func.bind(sth)(),mozilla手冊中提到bind是在ECMA-262 5th Edition中新增的一個特性,這里單獨列出來作為一種調用方式是因為它彌補了直接調用中不能綁定作用域的缺陷。

        4.func.call(),這是第二種調用方式,每個方法的原型中都定義了call方法,用來執行當前方法。

        5.func.apply(),call的雙胞胎兄弟。

        func()

        這是最常見的調用方式,在任何語言中隨處可見。func(x, y)可以傳入不同的參數。在某些語言,例如php,java中,這種調用足以解決一切問題。但是javascript是一門函數式語言,閉包的概念和一個奇怪的關鍵詞this決定了這種調用方式的不足。this應該可以解釋為當前代碼段的作用域,會隨著代碼執行到不同的片段而改變,但是某些情況下我們不希望這個this被改變,例如綁定在某些dom上的事件,我們肯定不希望他們被調用的時候this被轉移到了window對象上,但有時候確實如此,再比如下面的代碼。

        復制代碼 代碼如下:

        var a ={};

        var func = function(x) {

        console.log(this);

        };

        a.onclick = function() {

        var x = 100;

        func(x);

        };

        a.onclick();

        可以把a想象成頁面中的一個鏈接,由于我們只是想將定義好的方法綁定到onclick事件上,而不是立刻調用它,而且這個方法擁有一個參數,所以我們需要用一個匿名方法將他包起來傳遞給a的onclick事件。這樣就有了一個問題,func中的this變成了全局對象window,顯然我們并不希望如此。這個時候,使用func()這種直接調用的方式就不行了,于是我們需要將func外的this綁定到func方法上。于是就有了bind,call,apply方法。

        bind

        bind的目的非常簡單,返回一個綁定了this對象的相同方法。上面的代碼修改一行就可以實現綁定this在a對象上目的。

        復制代碼 代碼如下:

        var a ={};

        var func = function(x) {

        console.log(this);

        };

        a.onclick = function() {

        var x = 100;

        func.bind(this)(x); // bind here

        };

        a.onclick();

        這樣,onclick事件的this就不會像無頭蒼蠅一樣到處亂跑啦。

        call & apply

        call和apply要放在一起講,因為他們實在太像了。他們都支持多參數,而且第一個參數都是即將綁定的this對象,第二個參數則是他們的區別所在,call使用獨立的參數作為調用方法的入參,apply使用一個數組作為入參。有的時候我們并不是不想改變this對象,而是想人為的將他綁定到別的對象上,這個時候call和apply是很好用的。(并不是說不能用bind,不過貌似bind出現的比較晚,可能瀏覽器兼容性不好)。舉個栗子:

        復制代碼 代碼如下:

        a = {

        func: function() {

        this.x += 1;

        },

        x: 0

        };

        b = {

        a: a,

        x: 20

        };

        for(var i = 0; i < 10; i++){

        b.a.func();

        }

        console.log(a.x);

        console.log(b.x);

        上面的a和b對象中都有x,我們希望func能針對性的修改對應的x,但是直接調用只可能修改func作用域中的x,也就是a.x。修改一下代碼,就可以實現修改b.x目的

        復制代碼 代碼如下:

        a = {

        func: function() {

        this.x += 1;

        },

        x: 0

        };

        b = {

        a: a,

        x: 20

        };

        for(var i = 0; i < 10; i++){

        b.a.func.call(b); // bind this to b

        }

        console.log(a.x);

        console.log(b.x);

      【javascript的方法】相關文章:

      JavaScript常用方法匯總10-25

      JavaScript數組常用方法介紹09-04

      javascript跨域訪問的方法07-09

      javascript編程異常處理的方法08-04

      JavaScript fontcolor方法入門實例07-07

      使用ajax操作JavaScript對象的方法09-28

      詳解JavaScript中的splice()使用方法08-20

      關于javascript尋找錯誤方法整理05-23

      最常用的20個javascript方法函數09-10

      Javascript中arguments對象的詳解和使用方法08-20

      主站蜘蛛池模板: 骚片av蜜桃精品一区| 亚洲天堂中文字幕乱码| 宕昌县| 亚洲色拍拍噜噜噜最新网站| 日本一区二区在线资源| 极品诱惑一区二区三区| 平武县| 91中文字幕一区在线| 国产精品av在线一区二区三区| 国产最新视频在线不卡| 南阳市| 白朗县| 男女视频在线一区二区| 人妻中文字幕一区二区二区| 久久久老熟女一区二区三区| 亚洲午夜亚洲精品国产成人| 人妖在线网国产一二三四| 景泰县| 久久综合久久综合老熟女| aa视频在线观看播放免费| 偷拍av一区二区三区| 一本色道久久综合中文字幕| 人妻精品一区二区免费| 国产精品黑色丝袜在线播放| 黄梅县| 德昌县| 龙里县| 远安县| 河西区| 日韩国产av一区二区三区精品| 赞皇县| 四虎无码精品a∨在线观看| 滁州市| 中文字幕日产人妻久久| 日韩国产av一区二区三区精品 | 成年大片免费视频观看| 久久精品熟女不卡av高清| 日韩av一区二区三区在线播放| 久久精品国产乱子伦多人| 中文字幕偷拍亚洲九色| 久久久精品免费国产四虎|