Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/2: Рейтинг темы: голосов - 2, средняя оценка - 5.00
2 / 2 / 0
Регистрация: 10.09.2012
Сообщений: 48
1

Метод объекта не привязывается к объекту

22.03.2013, 02:18. Просмотров 499. Ответов 7
Метки нет (Все метки)

Добрый день!
Помогите со следующей проблемой. В примере рассматривается описание объекта и создание для него метода.
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// конструктор объекта "Двигатель" 
function Engine (cil, v) {
    this.cilCount = cil;
    this.v = v;
    return this;
}
// конструктор объекта "Автомобиль" 
function Automobile (aVendorName, aModel, nCil, V) {
    this.vendor = aVendorName;
    this.model = aModel;
    this.engine = new Engine (nCil, V);
    this.getInfo = autoInfo;
 
    return this;
}
function autoInfo() {
    alert ("Производитель: "+this.vendor+"\n"+
           "Модель: "+this.model+"\n"+
           "Двигатель: "+this.engine.cilCount+"цил. объем "+this.engine.v+"л.\n"); 
}
 
var myAuto = new Automobile("Toyota", "Celica", 6, 2.2);
myAuto.getInfo();
Здесь все работает.
А вот когда я пытаюсь на писать след код:

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// конструктор объекта "Двигатель" 
function Engine (cil, v) {
    this.cilCount = cil;
    this.v = v;
    this.info=autoInfo();
    return this;
}
 
function autoInfo() {
    alert (this.cilCount + " " + this.v); 
}
 
var myAuto = new Automobile(6, 2.2);
myAuto.Info();
То код не работает, плюс не поттягивает поля к указателю this. (через Visual Studio 2012) в методе autoInfo().
В чем может быть проблема?
p.s. отдельно поля выводит через alert();
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.03.2013, 02:18
Ответы с готовыми решениями:

Методы доступа. Как именно метод привязывается к определённой переменной
Привет,форумчане. Изучаю с++ по Либерти. Дошёл до классов,точнее до методов доступа. ...

Можно ли вызвать метод одного объекта через метод другого объекта?
Мне нужно сделать так, чтобы при вызове метода OnMouseDown() Первого объекта вызывался метод...

Движение 1 объекта к другому объекту
Как делать так, чтобы объект 1 считывал координаты объекта 2 и двигался к нему?

Движение объекта к другому объекту
На углу экрана(без разница где) стоит маленькое изображение коробки, а на других местах другие...

7
8 / 8 / 1
Регистрация: 16.02.2013
Сообщений: 24
22.03.2013, 04:01 2
Прокомментирую твой код:
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// конструктор объекта "Двигатель" 
function Engine (cil, v) {
    this.cilCount = cil;
    this.v = v;
    this.info=autoInfo(); // свойству info присваевается результат исполнения функции autoInfo
    return this; // это делать не обязательно, т.к. this возвращается неявно
}
 
function autoInfo() {
    alert (this.cilCount + " " + this.v); 
}
 
var myAuto = new Automobile(6, 2.2); // может всё таки new Engine(6, 2.2) ?? 
myAuto.Info(); // регистр и возможность вызова имеют значение. У тебя есть свойство info, а не метод Info
Вот исправленная версия:

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
// конструктор объекта "Двигатель" 
function Engine (cil, v) {
    this.cilCount = cil;
    this.v = v;
    this.info=autoInfo; // Ты присваивал результат функции, а нужно было сам объект функции
}
 
function autoInfo() {
    alert (this.cilCount + " " + this.v); 
}
 
var myAuto = new Engine(6, 2.2); 
myAuto.info();
0
2 / 2 / 0
Регистрация: 10.09.2012
Сообщений: 48
22.03.2013, 12:44  [ТС] 3
с грамматикой согласен, это с сонных глаз написал бред. но вот проблема, в браузере все равно код не работает. в Firefox в консоле ошибок работает, выдает результат, в адресной строке при запуске через javascript: работает, в вот при запуске через файл - нет. в браузере поддержка JavaScript включена.
0
8 / 8 / 1
Регистрация: 16.02.2013
Сообщений: 24
22.03.2013, 13:03 4
Странно. Здесь работает. Может неправильно путь к файлу указан?

Добавлено через 5 минут
Если ты пытаешься использовать конструкторы Engine и Automobile одновременно, то конечно работать будет неправильно.
Функция autoInfo() определяется два раза, а значит оба конструктора будут использовать последнюю из определенных. Это так называемый подъем - все определения функций поднимаются в начало и если используется две функции с одинаковыми именами то будет использована та что в коде находится ниже.
0
2 / 2 / 0
Регистрация: 10.09.2012
Сообщений: 48
22.03.2013, 13:24  [ТС] 5
я использовал лишь тот кусочек кода, который ты правил

Добавлено через 2 минуты
а вот кстати, все что в верхнем примере, там где 2 конструктора, все работает правильно!
0
8 / 8 / 1
Регистрация: 16.02.2013
Сообщений: 24
22.03.2013, 13:29 6
В верхнем примере в конструкторе Engine не используется autoInfo, значит все норм. Ты переходил по ссылке? Если всё работает то в своем коде ты или неправильно подключил скрипт либо неправильно его используешь, или ниже есть его переопределение.
1
2 / 2 / 0
Регистрация: 10.09.2012
Сообщений: 48
22.03.2013, 13:41  [ТС] 7
да, теперь и у меня все заработало. где то видать ошибся и не замечал, переписал все заного и вуаля! спасибо!
а еще вопрос, как можно по этому объекту создать массив объектов типа engine?
0
8 / 8 / 1
Регистрация: 16.02.2013
Сообщений: 24
22.03.2013, 14:32 8
JS - слабо типизирован, так что без особых проблем.
Можно так:
Javascript
1
2
3
var engineArray = [];
engineArray[engineArray.length] = new Engine(6, 2.2);
engineArray[engineArray.length] = new Engine(6, 2.6);
Но я бы посоветовал создать функцию или метод выполняющий эти действия:
Javascript
1
2
3
4
5
6
7
8
9
10
function addEngineEl(arr, cil, v) {
  if (!arr || !cil || !v) { throw "Не заданы параметры" }
  arr[arr.length] = new Engine(cil, v);
}
 
var a = [];
 
addEngineEl(a, 4, 2.2)
addEngineEl(a, 2, 2.1)
console.dir(a)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.03.2013, 14:32

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Переход от объекта к объекту клавишами стрелками
С помощью клавиш стрелок нужно перемещаться по форме от изображения к изображению, при переходе...

Как сделать перемещение объекта к другому объекту
Я еще новичок, но... Надо чтобы при нажатии на объект1 он находил бы на сцене объект2 и...

Как присвоить значения из одного объекта другому объекту?
у меня два объекта, мне надо присвоить значения из одного объекта другому объекту, как это можно...

Доступ к объекту, который является свойством другого объекта
Здравствуйте, у меня следующая проблема. Есть класс Test_class. Одним из свойств этого класса...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.