2017-06-14 63 views
1

是否可以像Java一樣執行相同的操作,並將函數引用傳遞給JavaScript中特定對象的函數?我可以傳遞對特定對象的實例函數的引用嗎?

考慮下面的代碼:

_.every(aS, function (value) { 
    return exp.test(value); 
}); 

我想這樣做:

_.every(aS, exp.test); 

即導致該特定RegExptest函數被調用。

這是可能的JavaScript?


答:是的,可以看看 chapter 2 of You Don't Know JS: this & Object Prototypes 硬綁定

回答

3

是的,但可以肯定的this引用的exp.text裏面執行工作正常,你應該bind它:

_.every(aS, exp.test.bind(exp)); 

對於某些功能,這可能不是必要的(當他們不使用this參考),但它並沒有傷害。

有關this的更多信息,請參閱How does the this keyword work

+0

一個很好的解釋是[你不知道JS的第2章:this&Object prototypeotypes](https://github.com/getify/You-Dont-Know-JS/blob/master/this%20 %26%20object%20prototypes/ch2.md)部分*硬綁定*。 – Roland

1

是的,但你必須對如何在JS中工作this有一點了解。

基本上,你必須將函數綁定到像這樣的對象。

_.every(aS, exp.test.bind(exp)) 

基本上,當你使用bind,它可以確保無論在哪裏函數被調用時,this總是必將給您傳遞給函數的對象。如果您沒有撥打bind,那麼this將被綁定到瀏覽器中的全局對象是window

相關問題