the actual reference for "this" is not always the same and changes depending on the context and how you call the function.
for e.g
lets assume you have got a global variable "a"
var a;
...
something.prototype = {
xy: function(n) {
this.a = n;
}
...
}
var obj = new something();
obj.xy.call(this, 10); // set the context to global. this == 'global' here
console.log(obj.a); //undefined
console.log(a); //10
the above code calls the xy function, but sets "this" to the global object and modifies the global variable a instead of the instance variable. "this" inside the function does not refer to the object instance but the global object (window object).call and apply can be used to modify the actual meaning of "this", whenever functions are called.
obj.xy(10);
console.log(obj.a); // 10
here you are setting the context to the object instance and "this" refers to the object instance correctly and you get the expected output.
And to answer your question
is b=this.xy(n) allowed, and if so, what would this in b=this.xy(n)
this is allowed and the result would be again depending on the context of the call that you are making.