2010-12-01 3 views
3

J'écris quelques classes auxiliaires pour écrire des scripts Adobe Illustrator.Pourquoi mon objet n'a-t-il pas de constructeur?

Mon problème commence dans l'objet Œillet. Lorsque je l'instancie, il échoue au premier new Group() parce qu'apparemment Group n'a pas de constructeur.

Voici une version allégée de mon code:

/****************** Collection Class **********************/ 

function Collection() { 
    this.parent = app.activeDocument; 
    this.typename = "Collection"; 
} 

    Collection.prototype.setName = function(name) { 
     this.instance.name = name; 
    }; 

/****************** Group (extends collection) *****************/ 

function Group(name, parent) { 
    this.parent = parent || this.parent; 
    this.instance = this.parent.groupItems.add(); 
    if(name) { 
     this.setName(name); 
    } else { 
     this.setName("Group"); 
    } 
} 

Group.prototype = new Collection(); 

/****************** Shape Class **********************/ 

function Shape() { 
    this.parent = app.activeDocument; 
    this.typename = "Shape"; 
} 

Shape.prototype.setName = function(name) { 
     this.instance.name = name; 
    }; 

Shape.prototype.stroke = function(width, color) { 
     this.instance.stroked = true; 
     this.instance.strokeWeight = width; 
     this.instance.strokeColor = color; 
    }; 

/****************** Line (extends Shape) **********************/ 

function Line(parent, start, end) { 

    this.instance = parent.pathItems.add(); 
    // [ [startX, startY], [endX, endY] ] 
    this.instance.setEntirePath([start,end]); 

} 

Line.prototype = new Shape(); 

/****************** Eyelet (extends Shape) **********************/ 

function Eyelet(parent, position) { 
    this.instance = new Group("Eyelet", parent); 
    var whiteCross = new Group("White", this.instance); 
    var blackCross = new Group("Black", this.instance); 

    var build = function(group, color, width) { 
     var vertical = new Line(group , [0 , 0] , [0 , 50]); 
     vertical.setName("vertical"); 
     vertical.stroke(width, color); 
     var horizontal = new Line(group , [0 , 50] , [50 , 0]); 
     horizontal.setName("horizontal"); 
     horizontal.stroke(width, color); 
    }; 

    build(whiteCross.instance, white, (3 * scale)); 
    build(blackCross.instance, black, (1 * scale)); 

    this.instance.position = position; 

} 

Eyelet.prototype = new Shape(); 

Quand j'écris

var eyelet = new Eyelet(layer2, [10,10]); 

Je reçois

Group does not have a constructor

J'ai couru à travers ce code JSLint et je ne peut pas voir pourquoi cela ne fonctionne pas. Toute aide serait très appréciée.

+0

jsCode de votre code: http://jsfiddle.net/aditya/RqByH/ - Je n'ai pas cette erreur ici. Il génère d'autres erreurs, mais c'est parce que votre code n'est pas complet. – aditya

+0

@aditya Oui tu as raison. Si je colle un 'alert()' dans le constructeur du groupe, il alerte bien, mais pas dans Illustrator. Hmmmmm ... – MrMisterMan

+0

Dans le code original, êtes-vous sûr que Group est visible dans la même portée que Eyelet? Essayez de renommer la fonction Group(), et voyez si vous obtenez la même erreur. Essayez ensuite de déplacer ou de copier Group() pour qu'il soit immédiatement au-dessus d'Eyelet et voir ce qu'il se passe. –

Répondre

2

Il s'avère que le fait que ce soit dans Adobe Illustrator est pertinent. J'ai renommé l'objet Group en MyGroup comme Dan Breslau l'a suggéré et cela a fonctionné comme je m'y attendais. Il semble qu'Illustrator ait un objet global Group qui causait le problème. Merci de votre aide.

Questions connexes