2014-12-01 82 views
1

好的,所以我有兩個類。 類1包含一個特定的函數,它訪問一些類的屬性。這是什麼樣子:將類函數作爲參數傳遞給另一個類,用作JavaScript中的回調函數

function class1() { 
    this.variable = "something"; 
} 

class1.prototype.callback = function() { 
    console.log(this.variable); // Returns undefined 
} 

2級可以調用它被賦予任何功能,如下所示:

function class2() {} 

class2.prototype.caller = function(callback) { 
    callback(); 
} 

然後在我的規則的Javascript我這樣做:

var c1 = new class1(); 
var c2 = new class2(); 
c2.caller(c1.callback); 

它應該返回「某些東西」,但它會拋出一個未定義的錯誤。我知道這是因爲它在class2的範圍內,它試圖訪問那裏的變量,但是我不知道如何讓它在class1的範圍內執行。

任何幫助,非常感謝!

+5

不分配在構造函數中'prototype'方法。 – Pointy 2014-12-01 15:59:41

+0

尖刺是正確的,原型的目的是爲了避免在每個instanciation被定義。 – axelduch 2014-12-01 16:00:20

+0

謝謝,我不知道。我會編輯我的課程:) – Qub1 2014-12-01 17:02:58

回答

4

使用.bind()或包裝功能:

c2.caller(c1.callback.bind(c1)); 

請注意,你的代碼是錯誤的,因爲它稱爲通過在返回值之前的功能。

或者:

c2.caller(function() { c1.callback(); }); 
+0

啊,是的,我看到了,我輸入了這個錯誤。我要去嘗試綁定,謝謝! – Qub1 2014-12-01 17:00:09

+0

@ Qub1'.bind()'唯一的問題是,它在真正的舊瀏覽器中不受支持,但[MDN網站提供了一個補丁。](https://developer.mozilla.org/zh-CN/)美國/文檔/網絡/的JavaScript /參考/ Global_Objects /功能/綁定#填充工具) – Pointy 2014-12-01 17:04:26

相關問題