It's important to recognize that Functions are different from Methods. Methods are bound to the objects that they are defined in, whereas Functions are not bound to any object.
When you are using apply or even call on a method you are extracting it from its instance, but it will always be bound to the object.
So in your example if c() is inside an object, that is why you are not seeing thisObject change.
From adobe on Methods:
Methods are functions that are part of a class definition. Once an
instance of the class is created, a method is bound to that instance.
Unlike a function declared outside a class, a method cannot be used
apart from the instance to which it is attached
Now if you want to be able to change the thisObject you can create a function outside of the object and pass the new thisObject parameter. Here's a very basic example:
class myClass {
public function myBoundFunction():void {
trace( "Bound to: " + this );
}
}
//declared outside the class
function unboundFunction():void {
trace( "Unbound: " + this.name );
}
Then instantiating and applying the functions with thisObject parameter:
var c:myClass = new myClass();
//bound function call
c.myBoundFunction.apply( this );
//unbound call
unboundFunction.apply( this );
Output:
Bound to: [object myClass]
Unbound: root1