Each function in JavaScript and TIScript gets implicit argument named this
.
So when you call method of some object as foo.bar(1)
then foo
object is passed to the bar(param)
function as a value of this
argument. And the param
will get value of 1
.
All of us who are practicing JS, Python, Ruby, etc. know about that ‘this’ thing pretty well.
But what shall you do when you have inner function and want to access ‘this’ value of outer function? The only way in JavaScript for that is to declare other variable with distinct name and assign ‘this’ to it: var that = this;
.
To cover such code patterns I’ve introduced in TIScript “super this” concept, so we have following implicit variables in any function:
this
– standard this variable;this super
– standard this variable of outer function;this super super
– this variable of outer-outer function;- etc.
Here is an example that outputs “6” in standard output:
class Test { function this(data) { // constructor this.data = data; // instance field } function Outer(arg1) { // this - hidden argument, local variable // arg1 - argument, local variable function Inner(arg2) { // this - hidden argument, local variable // arg2 - argument, local variable // arg1 - outer variable - outer argument // this super - outer variable - outer 'this' argument return (this super).data // 1 + arg1 // 2 + arg2 // 3 } return Inner; } } var test = new Test(1); var innerFunc = test.Outer(2); stdout.println( innerFunc(3) );