Должен ли класс javascript явно что-то возвращать? - PullRequest
1 голос
/ 13 октября 2010

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

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


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;

Работает просто отлично, если я return rect или нет.

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

Ответы [ 2 ]

1 голос
/ 13 октября 2010

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

В строго ООП языках, таких как Java или C ++ , конструкторы ничего не возвращают .

0 голосов
/ 13 октября 2010

Ваш объект 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();
...