Показать сообщение отдельно
  #1 (permalink)  
Старый 21.11.2011, 16:42
Профессор
Отправить личное сообщение для popov654 Посмотреть профиль Найти все сообщения от popov654
 
Регистрация: 22.09.2010
Сообщений: 217

Помогите новичку в объектном JS
Всем добрый день,
У меня новый студпроект, нужно для браузера создать некое подобие UML-редактора. Начать решил с рисования простых фигур, нашёл для этого библиотечку. Порисовать с её помощью получилось, но как только начал писать код, отвечающий за логику, сразу всё перестало работать. При этом IE никаких ошибок не выдавал, судя по отладочной печати, просто на определённом месте сценарий переставал выполняться. Сейчас глянул Консоль ошибок в Opera - она выдаёт такую ошибку:

Inline script thread
Uncaught exception: TypeError: Cannot convert 'this.arguments' to object
Error thrown at line 6, column 16 in Shape(type, color, x, y, width, height) in http://popov654.pp.ru/qreal/QRealWeb/index.php:
if (this.arguments.length == 2)
called from line 40, column 13 in http://popov654.pp.ru/qreal/QRealWeb/index.php:
Circle.prototype = new Shape('circle')

Вот код:

<div id="Canvas" style="border: 1px solid black;position:absolute;left:43px;top:40px;height:420px;width:920px;"></div>
        <script type="text/javascript">
            var jg = new jsGraphics("Canvas");    // Use the "Canvas" div for drawing
             
            function Shape(type, color, x, y, width, height) {
                this.type = type
                if (this.arguments.length == 2) {
                   this.color = color
                } else {
                   this.color = '#DADADA'
                }
                if (this.arguments.length == 4) {
                    this.x = x
                    this.y = y
                } else {
                    this.x = document.getElementById('Canvas').style.width / 2
                    this.y = document.getElementById('Canvas').style.height / 2
                }
                if (this.arguments.length == 6) {
                    this.width = width
                    this.height = height
                } else {
                    this.width = 22
                    this.height = 22
                }
             }

             function Circle(color, x, y, width, height) {
                 this.color = color
                 this.x = x
                 this.y = y
                 this.width = width || 22
                 this.height = height || 22
                 this.draw = function() {
                     jg.setColor(color)
                     jg.fillEllipse(x, y, width, height);
                     jg.paint()
                 }
                 this.draw()
             }
             Circle.prototype = new Shape('circle')

             function Triangle(color, x, y, width, height) {
                 this.color = color
                 this.x = x
                 this.y = y
                 this.width = width || 22
                 this.height = height || 22
                 this.draw = function() {
                     jg.setColor(color)
                     jg.fillPolygon(new Array(x, x + width / 2, x + width), new Array(y + height, y, y + height));
                     jg.paint()
                 }
                 this.draw()
             }
             Triangle.prototype = new Shape('triangle')

             function Rectangle(color, x, y, width, height) {
                 this.color = color
                 this.x = x
                 this.y = y
                 this.width = width || 22
                 this.height = height || 22
                 this.draw = function() {
                     jg.setColor(color)
                     jg.fillRect(x, y, width, height);
                     jg.paint()
                 }
                 this.draw()
             }
             Rectangle.prototype = new Shape('rectangle')



             var protos = [new Circle('#00FF00', 78, 65, 22, 22),
                           new Triangle('#CC0000', 118, 65, 22, 22),
                           new Rectangle('#0000FF', 162, 65, 22, 22)]

             

             jg.setColor('black');
             jg.drawRect(50, 40, 200, 60);
             jg.setFont("Verdana", "14px", Font.BOLD);
             jg.drawString("Palette", 56, 43);
             jg.setColor("green");
             jg.fillEllipse(78, 65, 22, 22);
             jg.setColor("maroon");
             jg.fillPolygon(new Array(118,129,140), new Array(87,65,87));
             jg.setColor("blue");
             jg.fillRect(162, 65, 22, 22);
             jg.drawImage("logo_web.png", 300, 100, 294, 190);
             jg.paint();
    </script>


Где я ошибся?
Ответить с цитированием