从类中调用函数的引用函数不起作用

时间:2012-03-11 14:43:17

标签: javascript

我创建了一个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();

我在http://jsfiddle.net/sbel/8cgpH/3/

提出了一个jsFiddle

4 个答案:

答案 0 :(得分:1)

您只是忘了执行一项功能,请参阅http://jsfiddle.net/8cgpH/5/

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

你要交给AClass的那个参数是一个函数,一旦调用它就会返回一个包含方法init()的对象(你忘了这样做) - 换句话说:你只是递给一个class,但不是该类的实例。

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

答案 1 :(得分:1)

你的函数返回一些东西。函数本身没有属性init。调用函数来获取具有其属性的对象(aFunction不再是函数,而是init的对象,因此您的命名有点模糊):http://jsfiddle.net/8cgpH/8/

this.aFunction = aFunction();

答案 2 :(得分:1)

您需要调用 aFunction来获取其返回值。现在你正在做的是在函数对象本身中寻找属性init,它不存在。

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

Here's a demo.

答案 3 :(得分:0)

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

你的aFunction只是一个obj