2012-03-11 74 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

相关问题