2012-03-11 65 views
0

我創建了一個JavaScript類,它獲取對作爲構造函數參數的函數的引用。這個類有一個init()函數,它調用傳遞給構造函數的引用函數的init()函數。但是,這會導致錯誤,指出this.aFunction.init()未定義。從一個類中調用對函數的引用的函數不起作用

這是代碼:

function AClass(aFunction) { 
    this.aFunction = aFunction; 
} 

AClass.prototype.init = function() { 
    this.aFunction.init(); 
} 

var aClass = new AClass(function() { 
    return { 
     init: function() { 
      alert('success'); 
     } 
    }; 
}); 

alert('Before init');    
aClass.init(); 

我已經提出了一個在的jsfiddle:http://jsfiddle.net/sbel/8cgpH/3/

+2

也請在這裏展示的代碼,並參照你的代碼編寫你的問題。 – Marcin 2012-03-11 14:44:52

+0

JavaScript中沒有類。 'AClass'是一個構造函數。 – KooiInc 2012-03-11 17:30:55

回答

1

你根本忘了要執行一個功能,請參閱http://jsfiddle.net/8cgpH/5/

var aClass = new AClass(function() { 
    return { 
     init: function() { alert('success'); } 
    }; 
}); 

該參數你'交給AClass是一個函數,它會返回一個包含方法init()的對象一旦被調用(你忘記了t帽子) - 換句話說:你只是遞交一個類,但不是該類的一個實例。

var aClass = new AClass(function() { 
    return { 
     init: function() { alert('success'); } 
    }; 
}()); // <--- 
1

你的函數返回一些東西。該函數本身沒有屬性init。調用函數以獲取具有其屬性的對象(aFunction不再是函數,而是具有init的對象,因此您的命名會有點不明確):http://jsfiddle.net/8cgpH/8/

this.aFunction = aFunction(); 
1

您需要呼叫aFunction得到它的返回值。現在你正在做的是在函數對象本身尋找屬性init,它不存在。

AClass.prototype.init = function() { 
    this.aFunction().init(); 
};

Here's a demo.

0
var aClass = new AClass({ 
     init: function() { alert('success'); } 
}); 

您的機能缺失只是一個OBJ

相關問題