I've been frustrated by the same thing, there seems to be something very different about script objects and JavaScript in the form events. Like you can't set breakpoints in script objects.
The work around I've used is to assign a variable in the event my constructor function and then create the object locally, so your script object would become
var Class = function TestObject()
{
this.property1 = "a property";
this.property2 = "b property";
}
Class.prototype.join = function()
{
return this.property1 + " and " + this.property2;
}
and the button event becomes
var scoTestClass = scoTest.Class;
var scoTestObject = new scoTestClass();
app.alert(scoTestObject.join());
An extra line but I do get re-usable objects