Инициирование объекта внутри другого - PullRequest
0 голосов
/ 12 апреля 2011

У меня есть часть программного обеспечения JS, которая структурирована так

obj = new object[id]();

function wrapperFunction (e) {
    var pos = findPos(this);
    e._x = e.pageX - pos.x;
    e._y = e.pageY - pos.y;

    var func = obj[e.type];
    if (func) {
        func(e);            
    }
}

__

obj.line = function () {    
    this.started = false;
    this.mousedown = function (e) {

    }

    this.mousemove = function (e) {
        if (this.started) {

        }
    }

    this.mouseup = function (e) {
        if (this.started) {

        }
    }
}

Приведенный выше кодовый блок дублируется для нескольких фигур, поэтому имеется также obj.square obj.circle и т. Д. *

У меня также есть объект формы, который выглядит следующим образом.

function Shape (type, color, height, width, radius, x, y) {
    this.type = type;
    this.color = color;
    this.h = height;
    this.w = width; 
    this.r = radius;
    this.points = ["x","y"];
    this.points["x"] = [x];
    this.points["y"] = [y];
};

Я хотел бы инициировать объект формы в mousedown для каждого объекта. * И заполнить объект формы информацией о проппорте.

Теперь к вопросу.

radius рассчитывается для каждого mousemove, а также height и width, но когда я добавляю shapes = new Shape(circle, black, 10, 10, null, e._x, e._y) к mousemove, это выглядит как ...

this.mousemove = function (e) {
    if (this.started) {
        shapes = new Shape(circle, black, 10, 10, null, e._x, e._y);
    }
}

Объект формы не создается.

Если я создаю объект формы внутри функции-оболочки вместо mousemove, тогда объект инициируется, но я не могу использовать radius или height/width. Как я могу создать объект внутри другого объекта внутри функции-обертки, чтобы я мог использовать вычисленные термины внутри созданного объекта? Есть ли альтернативный маршрут, кроме того, что я делаю?

1 Ответ

0 голосов
/ 12 апреля 2011

Помимо неуверенности в строке obj = new object[this.id]();, я думаю , что вам просто не хватает ключевого слова this:

this.mousemove = function (e) {
    if (this.started) {
        this.shapes = new Shape(circle, black, 10, 10, null, e._x, e._y);
    }
}

Редактировать только что заметил больше странностей в вашем коде (да, это технический термин :). Я думаю, что вы хотите изменить эти строки в конструкторе:

this.points = ["x","y"]; // creates an array, which is indexed by numbers
this.points["x"] = [x];  // tacks on some ad-hoc properties to the array, which
this.points["y"] = [y];  // doesn't really make sense

к этому:

this.points = {x: x,   // I think this is what you actually mean to do.
               y: y};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...