2010-10-13 2 views
1

Я писал несколько javascripts для Adobe Illustrator, чтобы улучшить свой рабочий процесс. В последнее время я очень хорошо разбираюсь в ООП, поэтому я пишу его с использованием объектов, и я действительно думаю, что это помогает сохранить мой код в чистоте и легко обновить. Однако я хотел проверить некоторые рекомендации с вами, ребята.Должен ли класс javascript явно возвращать что-то?

У меня есть объект прямоугольника, который создает (три догадки) ... прямоугольник. Похоже, что этот


function rectangle(parent, coords, name, guide) { 

    this.top = coords[0]; 
    this.left = coords[1]; 
    this.width = coords[2]; 
    this.height = coords[3]; 
    this.parent = (parent) ? parent : doc; 

    var rect = this.parent.pathItems.rectangle(this.top, this.left, this.width, this.height); 
    rect.name = (name) ? name : "Path"; 
    rect.guides = (guide) ? true : false; 
    return rect; 
} 

Однако код прекрасно работает с или без того, чтобы последний

return rect

Так что мой вопрос, что делает

new rectangle(args);
возврат, если я явно не так сказать?

Если я это сделать:

 

var myRectangle = new rectangle(args); 
myRectangle.left = -100; 
 

Это прекрасно работает Wether я return rect или нет.

Большое спасибо за помощь.

+1

Вы можете перенаправить свой ответ, нажав стрелку вверх. Вы должны принять ответы на свой вопрос, нажав полый флажок рядом с моим ответом. –

+0

Я попробовал его, но у меня недостаточно репутации. Я боюсь. Можете ли вы принять более одного ответа? Насколько я понимаю, вы подождали какое-то время и приняли лучшее? Твой был отличный ответ, но я еще не знаю, что скажут другие люди. Или я не понимаю? – MrMisterMan

ответ

0

Ваш объект javascript должен иметь только свойства и методы.

Используйте ключевое слово return внутри метода.

function rectangle(parent, coords, name, guide) { 

    this.top = coords[0]; 
    this.left = coords[1]; 
    this.width = coords[2]; 
    this.height = coords[3]; 
    this.parent = (parent) ? parent : doc; 

    this.draw = function() { // add a method to perform an action. 
     var rect = this.parent.pathItems.rectangle(this.top, this.left, this.width, this.height); 
     rect.name = (name) ? name : "Path"; 
     rect.guides = (guide) ? true : false; 
     return rect; 
    }; 
} 

Как вы бы использовали свой объект.

var myRectangle = new rectangle(args); 
    myRectangle.draw(); 
+0

Я развиваю игру в понг в javascript, и этот метод - то, что я там использую. Я не знаю, почему я не делаю то же самое в своем сценарии Illustrator. Одна из причин, по которой я полагаю, менее сложна без метода draw. Не имеет значения, как вы думаете? – MrMisterMan

1

Абсолютно не нужно. Экземпляр будет создан и назначен автоматически при вызове new. Не нужно возвращать this или что-нибудь в этом роде.

В строго объектно-ориентированным языки, как Java или C++, конструкторы ничего не вернется.

+1

Отлично, спасибо! Я не знал, что строгие конструкторы ООП ничего не вернули. – MrMisterMan

+1

Методы внутри конструктора могут возвращать «это» для помощи в каскадных вызовах функций. –

+0

@ Ravindra хороший пункт. –