国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

在JavaScript中鏈接.bind()調(diào)用出乎意料的結(jié)果?

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

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

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

查看以下內(nèi)容的簡單實現(xiàn)可能會有所幫助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,從中返回的函數(shù)bind沒有地方引用this調(diào)用綁定函數(shù)的。它被忽略,所以

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“再次”返回的函數(shù),但這重新綁定原始函數(shù)。它僅綁定外部函數(shù),而對內(nèi)部函數(shù)沒有影響,因為已經(jīng)設(shè)置為使用this傳遞給的上下文(值)調(diào)用基礎(chǔ)函數(shù)bind。我可以一次又一次地綁定,但最終要做的是創(chuàng)建更多的外部函數(shù),這些函數(shù)可以綁定到某些東西上,但仍然最終調(diào)用從第一個返回的最里面的函數(shù)bind。

因此,說bind“不能被覆蓋” 有點誤導(dǎo)。

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

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

然后我想安排我的原始函數(shù)與其他函數(shù)調(diào)用this,那么我不重新綁定綁定函數(shù):

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

相反,我只是創(chuàng)建了一個綁定到原始函數(shù)的新函數(shù):

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

從MDN:

bind()方法創(chuàng)建一個新函數(shù),該函數(shù)在調(diào)用時將其this關(guān)鍵字設(shè)置為提供的值

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

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

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

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

(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'}。

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

為什么?

這可能會有所幫助。我剛剛發(fā)現(xiàn)jQuery的版本行為相同!:O

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

日志 Object { foo='bar'}

標簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 琪琪午夜伦埋大全影院 | 韩国毛片 免费 | 亚洲一区二区三区在线网站 | 欧洲国产伦久久久久久久 | 孕妇交 | 日本污污网站 | 免费观看成人毛片 | 老太婆性杂交毛片 | 日本免费在线一区 | 特级黄色毛片视频 | 在线观看亚洲人成网站 | 久久国产精品国产精品 | 美国一级做a一级视频 | 国产高清免费观看 | 欧美+日本+国产+在线观看 | 亚洲成人在线免费视频 | 日韩a毛片免费全部播放完整 | 国产一区二区久久 | 日韩 国产 欧美视频一区二区三区 | 久揄揄鲁一二三四区高清在线 | 亚洲在线日韩 | 一级做a爰片久久毛片 | 女人张开双腿让男人桶爽免 | 一级做a爰片久久毛片16 | 18视频免费网站 | 综合色久七七综合七七蜜芽 | 国产最新精品 | 精品久久久久久乐 | 最新版天堂资源中文官网 | 国产成人精品福利网站在线 | 精品欧美成人高清视频在线观看 | 久久久久久精 | 动漫精品一区二区 | 精品一区二区视频 | 国产精品亚洲欧美一级久久精品 | 亚洲久久视频 | 高清国产在线播放成人 | 成人黄网18免费观看的网站 | 亚洲风情第一页 | 亚洲欧美成人综合 | 乱人伦中文视频在线观看免费 |