This code in a GUI application compiles and runs:
procedure TForm1.Button1Click(Sender: TObject); begin Self := TForm1.Create(Owner); end;
Assigning to Self is so illogical and useless that this 'feature' is probably an oversight. And as with assignable constants, it's not always easy to correct such problems.
The simple advice here is: don't do it.