2015-12-16 23 views
3

如何比較獨立於上下文(this)之前的函數? 我知道Function.prototype.bind返回新的函數,但它可以找出對原始函數的引用? 比方說,我想實現的功能equalsOrigins做到這一點對我來說:如何比較以前在javascript中定義的函數?

var func1 = someFunction.bind(obj1); 
var func2 = someFunction.bind(obj2); 
var func3 = otherFunction.bind(obj1); 

func1 === func2; // naturally returns false 
equalsOrigins(func1, func2); // should return true 
equalsOrigins(func1, func3); // should return false 
equalsOrigins(func2, func3); // should return false 

這有可能在JavaScript?

+2

我會咬:你爲什麼要這樣? – PeeHaa

+0

要理解它是如何工作的:-) – madox2

+0

我很想看看這是否可行,因爲獲得「原始」也意味着獲得前一個上下文,而在嵌套在對象中的函數中,上下文可能會很有趣。 –

回答

1

是否有可能找到對原始功能的引用?

不,無法訪問引擎內部或調試器。綁定函數確實包含對目標函數的引用,但它不可訪問。

最好的辦法是,如果函數不拋出或返回一個對象,可能會濫用它作爲構造函數,並重建原型對象的引用。

function example() { /* sane */ } 
var bound = example.bind({}); 

Object.getPrototypeOf(new bound).constructor == example // true