Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #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>


Где я ошибся?
Ответить с цитированием
  #2 (permalink)  
Старый 21.11.2011, 16:46
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

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

А, всё, разобрался. this.arguments писать нельзя, т.к. this указывает на создаваемый объект, а не на саму функцию.
Ответить с цитированием
  #4 (permalink)  
Старый 21.11.2011, 16:49
Профессор
Отправить личное сообщение для popov654 Посмотреть профиль Найти все сообщения от popov654
 
Регистрация: 22.09.2010
Сообщений: 217


Как-то сегодня быстро решилось, вчера полночи сидел, разные строчки в коде менял в поисках ошибки... Видимо, эта была не единственной, так как вначале делал без this, и не работало, поэтому и решил его добавить ради эксперимента
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите плис новичку в ajax urel AJAX и COMET 6 12.01.2013 21:36
Помогите новичку с выпадающим списком interest Элементы интерфейса 5 19.05.2010 13:15
помогите задать переменную в js bsgroupua Общие вопросы Javascript 3 01.02.2010 18:28
Помогите доработать JS Dotoni (X)HTML/CSS 4 26.11.2009 20:59
помогите написать аналог строки include("index.php?open=1") на js bushstas Общие вопросы Javascript 1 19.07.2009 02:48