javascriptsharepointsharepoint-2010

Why does SharePoint JavaScript define a function named “ULSTYE” and a label for an empty statement with the same name?


I've been looking at Sharepoint script files and I've come across this bit that I don't get:

function ULSTYE() {
    var o = new Object;
    o.ULSTeamName = "Microsoft SharePoint Foundation";
    o.ULSFileName = "SP.UI.Dialog.debug.js";

    return o;
}

SP.UI.$create_DialogOptions = function() {
    ULSTYE:;   <----------------------------- WTF?
    return new SP.UI.DialogOptions();
}

Actually every function definition in this file starts with the same ULSTYE:; line right after the opening brace. Can anybody explain what does the first line in the second function do?

Firefox/Firebug for instance interprets this function as something that I can't understand either:

function () {
    ULSTYE: {
    }
    return new (SP.UI.DialogOptions);
}

And I thought I knew Javascript through and through... ;) Must be some obscure feature I never used in the past and is obviously seldomly used by others as well.


Solution

  • The first bit defines a function that creates an object with a couple of properties and returns it. I think we're all clear on that bit. :-)

    The second bit, though, is not using that function. It's defining a label with the same name. Although it uses the same sequence of characters, it is not a reference to the function above. Firefox's interpretation makes as much sense as anything else, because a label should be followed by something to which it can refer.

    For more about labelled statements, see Section 12.12 of the spec.


    Off-topic: I would avoid using code from this source. Whoever wrote it is apparently fairly new to JavaScript and doesn't show much sign that they know what they're doing. For instance, they've left the () off the new Object() call, and while that's allowed, it's fairly dodgy thing to do. They could argue that they were doing it to save space, but if they were, they'd be better off using an object literal:

    function ULSTYE() {
        return {
            ULSTeamName: "Microsoft SharePoint Foundation",
            ULSFileName: "SP.UI.Dialog.debug.js"
        };
    }
    

    There's never much reason to write new Object() at all; {} is functionally identical.

    And, of course, there's no justification for the second bit at all. :-)