Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Default function on an object?

Is it possible to set a default function on an object, such that when I call myObj() that function is executed? Let's say I have the following func object

function func(_func) {
    this._func = _func;

    this.call = function() {
        alert("called a function");
        this._func();
    }
}

var test = new func(function() {
    // do something
});

test.call();

​I'd like to replace test.call() with simply test(). Is that possible?

like image 262
Elliot Bonneville Avatar asked May 10 '12 13:05

Elliot Bonneville


1 Answers

return a function:

function func(_func) {
    this._func = _func;

    return function() {
        alert("called a function");
        this._func();
    }
}

var test = new func(function() {
    // do something
});

test();

but then this refers to the returned function (right?) or window, you will have to cache this to access it from inside the function (this._func();)

function func(_func) {
    var that = this;

    this._func = _func;

    return function() {
        alert("called a function");
        that._func();
    }
}
like image 131
Andreas Louv Avatar answered Sep 18 '22 17:09

Andreas Louv