Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите с созданием нового объекта (https://javascript.ru/forum/misc/20897-pomogite-s-sozdaniem-novogo-obekta.html)

Sweet 26.08.2011 02:33

Абсолютно не понятно, зачем нужны эти строчки:
this.$firstButton = new Object(); 
this.$secondButton = new Object();
???

kadabrik 26.08.2011 09:51

Цитата:

Сообщение от Sweet (Сообщение 122568)
Абсолютно не понятно, зачем нужны эти строчки:
this.$firstButton = new Object(); 
this.$secondButton = new Object();
???

Будет работать и без них, но это правило хорошего тона - обявить все свойства объекта в конструкторе перед их использованием, к томуже IDE увидит что убъекта имеются эти свойства и будет выдавать их в выпадающеи списке свойств и методов. Если уж идет сопоставление кода с delphi то там ведь перед использованием какой-либо переменной сначала объявляем ее.

yambbkru 26.08.2011 22:16

Спасибо, kadabrik! Так стало понятней. А можно еще попутный вопрос? Я прочла уже несколько раз в учебнике и на этом сайте о наследовании в javascript. Но остались не понятые моменты. Допустим есть класс
function Obj1(c) {
this.a = c;
this.b = function() {alert(this.a);}
this.b();
}

При запуске
var myObj1 = new Obj1("1");

показывает сообщение 1. Теперь я хочу создать новый класс
function Obj2(c) {
this.d = c + [B]this.a[/B];
[B]this.b();[/B]
}

где this.a и this.b() - это свойство и метод объекта Obj1. Как мне связать эти эти объекты? Так?
Obj2.prototype = new Obj1("1")

Но тогда попутно создается и объект Obj1. Я читала про обходные пути, что мол создается объект, а функция-конструктор пустая или копируют свойства из первого объекта во второй...
А можно так связать объекты, что бы не создавать первый объект, а только взять его методы? Не скопировать, а как то сослаться не создавая его? Тем более строчка с прототипом должна быть написана вне обеих функций, я так поняла. Но было бы гораздо удобнее связать функции в теле второй функции Obj2. Так можно сделать? И еще вопрос. Что значит строчка
О1 = Obj1

? Как в этом случае ведут себя оба класса? Если в правый добавить свойства что будет? А если в левый? И что сделалось с прототипом?

kadabrik 26.08.2011 23:50

yambbkru, если речь идет о наследовании, то в js есть несколько способов его реализовать. Лично мне больше всего нравится этот метод. Для наследования именно свойств, а не методов лучше подходит вызов конструктора родителя в конструкторе потомка: MyClass.superclass.constructor.call(this). После этого все переменные объявленные в конструкторе родителя будут и у потомка.

melky 27.08.2011 00:02

Цитата:

Сообщение от yambbkru (Сообщение 122758)
есть класс
function Obj1(c) {
this.a = c;
this.b = function() {alert(this.a);}
this.b();
}

При запуске
var myObj1 = new Obj1("1");

я хочу создать новый класс
function Obj2(c) {
this.d = c + this.a;
this.b();
}

где this.a и this.b() - это свойство и метод объекта Obj1.

А можно так связать объекты, что бы не создавать первый объект, а только взять его методы?

Не скопировать, а как то сослаться не создавая его?

см. красную строку
function Obj1(c) {
    this.a = c;
    this.b = function() {
        alert(this.a);
    }
    this.b();
}
var myObj1 = new Obj1("1");

function Obj2(c) {
    debugger
    this.d = c + this.a;
    this.b();
}

*!*
Obj2.prototype = myObj1;
*/!*

// создадим экземпляр второго объекта, чтобы проверить работоспособность
new Obj2('c');


выдает два алерта, в которых 1.

Цитата:

Сообщение от yambbkru (Сообщение 122758)
О1 = Obj1

? Как в этом случае ведут себя оба класса? Если в правый добавить свойства что будет? А если в левый? И что сделалось с прототипом?

тут непонятно

kadabrik 27.08.2011 00:32

melky, как же всетаки текст на аватарке контрастирует с началом предыдущего сообщения :)

Андрей38 30.08.2011 18:00

Я увидел здесь разговор о var..Скажите пожайлуста, существет ли АНИМИРОВАНЫЙ АЛЕРТ и АНИМИРОВАНЫЙ var наподобие счетчика ? .Алерт выводит только стационарное значение var.
Причина вопроса такая_ меняется ширина картинки,ее анимированная ширина динамически передается другому объекту для его css.Как быть?

systemiv 30.08.2011 18:07

Цитата:

Сообщение от Андрей38
что-то такое наподобие счетчика,существует?

Да, замыкания

Андрей38 30.08.2011 18:08

Цитата:

Сообщение от systemiv (Сообщение 123584)
Да, замыкания

Спасибо!Буду юзать!

yambbkru 04.09.2011 23:32

А можно еще спросить? Вот есть такие 2 функции:
function a() {
  var t = {
    c : "1"
  }
  return t
}

function b() {
  var t = {
    d : "2"
  }
  return t
}

var A = a();
var B = b();
alert(A.c + B.d)

В результате выдает сообщение "12". Как мне сделать, что бы все объекты, создаваемые функцией b() имели своим прототипом объект, создаваемый функцией а()?


Часовой пояс GMT +3, время: 14:50.