mdk.fr/content/blog/javascript-foncteur.md

56 lines
1.4 KiB
Markdown
Raw Normal View History

2017-04-04 21:11:23 +00:00
Title: Javascript Foncteur
I just discovered, this morning, how to create a Visitor in Javascript:
A visitor is an objet who can be used like a function:
:::javascript
var my_foncteur = new A_Foncteur();
my_foncteur.can_have_methods(42);
my_foncteur("Can be called like a function");
Implementing it in `C++` is extremly easy, using operator overloading, so
overloading the `() operator` of an object, we have a visitor, but in
Javascript, in the current version, we do not have operator overloading.
So we have the following trick:
:::javascript
/* Don't pollute global scope too much. */
window.your_scope = {};
your_scope.A_Function_Object = function()
{
/* Prepare a closure */
var that = this;
this.some_data = "";
this.foncteur = function()
{
/*
** Here, `this` is from the caller, we don't care about it,
** but the `that` is from the closure, so it's our `this`.
*/
alert(that.some_data);
}
/*
** Add any function you need.
*/
this.foncteur.set_data = function(data)
{
/*
** Same way to get "our" this from the closure.
*/
that.some_data = data;
}
return (this.foncteur);
}
/* Enjoy */
var test = new your_scope.A_Function_Object();
test.set_data(42);
test();
Enjoy!