亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

在JavaScript中鏈接.bind()調用出乎意料的結果?

瀏覽:77日期:2024-05-10 14:06:52
(adsbygoogle = window.adsbygoogle || []).push({}); 如何解決在JavaScript中鏈接.bind()調用出乎意料的結果??

人們很容易想到的bind是莫名其妙地修改函數使用新的this。在這種(不正確的)解釋中,人們認為是bind在函數中添加了某種魔術標記,告訴該函數this下次調用時將使用其他標記。如果真是這樣,那么應該有可能“覆蓋”并更改魔術標記。然后有人會問,任意限制能力的原因是什么?

但是實際上,這 它的工作原理。,當調用時將調用一個具有特定特性的第一個函數this。使用這個新創建的函數的行為,指定this調用原有的功能,是在焚燒時產生的功能時。在更改之后,不能再對其進行任何其他更改,而只能更改該函數返回的任何其他函數的內部。

查看以下內容的簡單實現可能會有所幫助bind:

// NOT the real bind; just an exampleFunction.prototype.bind = function(ctxt) { var fn = this; return function bound_fn() {return fn.apply(ctxt, arguments); };}my_bound_fn = original_fn.bind(obj);

如您所見,在中bound_fn,從中返回的函數bind沒有地方引用this調用綁定函數的。它被忽略,所以

my_bound_fn.call(999, arg) // 999 is ignored

要么

obj = { fn: function () { console.log(this); } };obj.fn = obj.fn.bind(other_obj);obj.fn(); // outputs other_obj; obj is ignored

因此,我可以綁定從bind“再次”返回的函數,但這重新綁定原始函數。它僅綁定外部函數,而對內部函數沒有影響,因為已經設置為使用this傳遞給的上下文(值)調用基礎函數bind。我可以一次又一次地綁定,但最終要做的是創建更多的外部函數,這些函數可以綁定到某些東西上,但仍然最終調用從第一個返回的最里面的函數bind。

因此,說bind“不能被覆蓋” 有點誤導。

如果我想“重新綁定”一個函數,那么我可以對原始函數進行新的綁定。因此,如果我綁定一次:

function orig() { }my_bound_fn = orig.bind(my_obj);

然后我想安排我的原始函數與其他函數調用this,那么我不重新綁定綁定函數:

my_bound_fn = my_bound_fn.bind(my_other_obj); // No effect

相反,我只是創建了一個綁定到原始函數的新函數:

my_other_bound_fn = orig.bind(my_other_obj);解決方法

從MDN:

bind()方法創建一個新函數,該函數在調用時將其this關鍵字設置為提供的值

我可以很高興地看到它在此示例中有效:

(function () { console.log(this);}).bind({foo:'bar'})();

哪個日志Object { foo='bar'}。

但是,如果我鏈接了另一個綁定調用,甚至是“調用”調用,我仍然會使用分配給第一個綁定的對象的“ this”來調用函數。例子:

(function () { console.log(this);}).bind({foo:'bar'}).bind({oof:'rab'})();

(function () { console.log(this);}).bind({foo:'bar'}).call({oof:'rab'});

兩者都記錄了日志,Object { foo='bar'}而不是我期望的:Object { oof='rab'}。

無論我鏈接多少個綁定調用,似乎只有第一個都起作用。

為什么?

這可能會有所幫助。我剛剛發現jQuery的版本行為相同!:O

jQuery.proxy( jQuery.proxy(function() { console.log(this); },{foo:'bar'}),{oof:'rab'})();

日志 Object { foo='bar'}

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 日本韩国一级 | 色婷婷狠狠五月综合天色拍 | 一级特黄性色生活片一区二区 | 亚洲免费片 | 久久综合九色综合97婷婷群聊 | 国产日韩欧美亚洲 | 中文字幕在线色 | 欧美亚洲一区二区三区 | 日韩a级在线 | 男人和女人做a免费视频 | 日韩草逼视频 | 婬荡少妇21p | 国产福利一区二区在线观看 | 国产一区二区三区四区在线观看 | 免费看欧美一级特黄a大片一 | 黄色一级网址 | 成人看的午夜免费毛片 | 热久久国产欧美一区二区精品 | 日韩一级黄色影片 | 国产精品成人va在线观看入口 | 亚久久伊人精品青青草原2020 | 国产在线毛片 | 亚州va| 精品国产品香蕉在线观看75 | 亚洲高清视频在线 | 污视频免费网站 | 一区二区三区精品国产 | 黄色三级在线播放 | 精品国产香蕉 | 一级做α爱过程免费视频 | 国产在线精彩视频二区 | 永久精品免费影院在线观看网站 | 国产精品搭讪系列在线观看 | 成人综合色站 | 日韩特黄特色大片免费视频 | 亚洲国产天堂久久综合9999 | 亚洲精品欧洲一区二区三区 | 国产在线日本 | 6699久久久久久久77777'7 66av99精品福利视频在线 | 青青青爽国产在线视频 | 亚洲成a人v天堂网 |