2010-12-01 1 views
3

Я пишу несколько вспомогательных классов для сценариев Adobe Illustrator.Почему у моего объекта нет конструктора?

Моя проблема начинается с объекта Eyelet. Когда я создаю экземпляр, он терпит неудачу при первом new Group(), потому что, видимо, Group не имеет конструктора.

Вот усеченная версия моего кода:

/****************** 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(); 

Когда я пишу

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

Я получаю

Group does not have a constructor

Я побежал этот код через JSLint и I не может понять, почему это не работает. Любая помощь приветствуется.

+0

jsFiddle вашего кода: http://jsfiddle.net/aditya/RqByH/ - здесь я не получаю эту ошибку. Он вызывает некоторые другие ошибки, но это потому, что ваш код не является полным. – aditya 2010-12-01 14:41:32

ответ

2

Оказывается, это факт, что в Adobe Illustrator соответствует. Я переименовал объект Group в MyGroup, как предложил Дэн Бреслау, и он работал так, как я ожидал. Кажется, у Illustrator есть глобальный объект Group, который вызывает проблему. Спасибо за вашу помощь.