Skip to main content
dserodio
Participating Frequently
February 21, 2012
Answered

Is it possible to modify a DOM object's prototype?

  • February 21, 2012
  • 1 reply
  • 610 views

I can modify the prototype of Javascript built-in types, for instance:

Array.prototype.indexOf = function(elt/*, from*/) {
    var len = this.length >>> 0;

    var from = Number(arguments[1]) || 0;
    from = (from < 0)
        ? Math.ceil(from)
        : Math.floor(from);
    if (from < 0)
        from += len;

    for (; from < len; from++) {
        if (from in this &&
            this[from] === elt)
        return from;
    }
    return - 1;
};

Can I do the same to objects from Photoshop's DOM, like Document or LayerSets? When I try to access Document.prototype or activeDocument.layers.prototype I get a Document is undefined error...

This topic has been closed for replies.
Correct answer Michael_L_Hale

From what I understand there are a lot of classes in the Photoshop DOM that are not loaded into memory until object of that class is referenced. Which means you have to do something like this.

app.documents[0];// load the Document class by making a reference to a document object.

Document.prototype.foo = function(){ return 'bar'};

app.activeDocument.foo();

1 reply

Michael_L_HaleCorrect answer
Inspiring
February 21, 2012

From what I understand there are a lot of classes in the Photoshop DOM that are not loaded into memory until object of that class is referenced. Which means you have to do something like this.

app.documents[0];// load the Document class by making a reference to a document object.

Document.prototype.foo = function(){ return 'bar'};

app.activeDocument.foo();