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

yambbkru 22.08.2011 19:43

Народ, помогите пожалуйста! Наверняка опытные программисты сталкивались с таким. Если нужно я могу уточнить вопрос...

ILL-JAH 22.08.2011 20:56

yambbkru,
Создай объект, создай у объекта нужные свойства и методы.
А что должен делать скрипт?

yambbkru 22.08.2011 21:54

Да этот скрипт - выдуманный. Я его придумала только для того, что бы научится. Я вроде немного разобралась. Если я создаю объект вот так:
function C(a){with (C) {
				first = a.b;
				second = "Вторая кнопка";			
				firstBut = function() {$("#doc").append('<input type="button" value="'+first+'" onclick="secondBut()">');}
				secondBut = function() {$("#doc").append('<input type="button" value="'+second+'" onclick="ok()">');}
				ok = function() {alert("ОК!");}
				firstBut();
			}};
			$().ready(function() {new C({b:"Первая кнопка"});});

то, все работает так же, как и процедурным способом. Буду пока так делать...

ILL-JAH 22.08.2011 21:58

Женщина, все скрипты выдумываются мозгом. Объясни, что он должен делать.

kadabrik 23.08.2011 00:30

Не самый удачный выбран пример. Как я понял нужно что-то типа этого:
function MyWTFObject()
{
  this.$obj = $('<div id="my-wtf-object" style="border:1px solid green"></div>').appendTo('body');
  this.$firstButton = new Object();
  this.$secondButton = new Object();
  this.createFirstButton();
}

MyWTFObject.prototype.createFirstButton = function()
{
  var obj = this;
  this.firstButton = $('<input type="button" value="first-button"/>')
                        .appendTo(this.$obj)
                        .click(function(){obj.createSecondButton()});
}

MyWTFObject.prototype.createSecondButton = function()
{
  var obj = this;
  this.firstButton = $('<input type="button" value="second-button"/>')
                        .appendTo(this.$obj)
                        .click(function(){obj.showOk()});
}

MyWTFObject.prototype.showOk = function()
{
  alert('ok');
}

/*----------------------------------------------*/
$(function()
{
  window.wtfObject = new MyWTFObject();
});

В примере используется ООП совместно с jQuery

yambbkru 26.08.2011 00:21

Я не очень поняла ваш пример! Вы можете дописать комментарии? Зачем использовать прототип? Почему просто нельзя добавить свойства и методы объекту?

yambbkru 26.08.2011 00:24

Для того, кто спрашивал что делает скрипт: мой выдуманный скрипт должен при запуске показывать кнопку, при нажатии на которую появляется еще одна кнопка, при нажатии на которую выскакивает сообщение ОК!

melky 26.08.2011 00:47

вот запускаемый скрипт - пример
<body> </body>

<script>
/* создает кнопку с указанным html и обработчиком клика  */
function Button( html, handler ){
    var a = document.createElement('button');
    a.innerHTML = html;
    a.onclick = handler;
    return a;
};

// когза страница загрузится, отобразим первую кнопку
window.onload = function(){

    // не знаю, зачем, но я их сохраняю
    var firstB,secondB;
    
    firstB = new Button("первая", function(){

        secondB = new Button("вторая", function(){
            alert("OK");
        });

        // добавляем её туда же,куда и первую
        firstB.parentNode.appendChild( secondB );
    });

    // добавляем первую кнопку в <body>
    document.body.appendChild( firstB );
};
</script>


это тот же код, но разноцветный.

/* создает кнопку с указанным html и обработчиком клика  */
function Button( html, handler ){
    var a = document.createElement('button');
    a.innerHTML = html;
    a.onclick = handler;
    return a;
};

// когза страница загрузится, отобразим первую кнопку
window.onload = function(){
    
    var firstB,secondB;
    
    firstB = new Button("первая", function(){
        secondB = new Button("вторая", function(){
            alert("OK");
        });
        // добавляем её туда же,куда и первую
        firstB.parentNode.appendChild( secondB );
    });
    // добавляемпервую кнопку в <body>
    document.body.appendChild( firstB );
};


использовать Button можно было и без new, но тут эти три буквы добавляют к читаемости кода

yambbkru 26.08.2011 01:16

Спасибо большое! Этот пример мне более понятен. Он больше похож на программирование в Делфи: каждая кнопка - объект и все они часть другого объекта - всего документа.

kadabrik 26.08.2011 01:32

Цитата:

Сообщение от yambbkru (Сообщение 122541)
Я не очень поняла ваш пример! Вы можете дописать комментарии?

//конструктор объекта-прототипа котрый будет всем рулить
function MyWTFObject()
{
  //создаем контейнер в который все будет отрисовываться
  this.$obj = $('<div id="my-wtf-object" style="border:1px solid green"></div>').appendTo('body');
  
  //объявим что у объекта есть два свойства - это первая и вторая кнопка соответственно
  this.$firstButton = new Object();
  this.$secondButton = new Object();
  
  //создадим первую кнопку
  this.createFirstButton();
}

//метод создает первую кнопку
MyWTFObject.prototype.createFirstButton = function()
{
  var obj = this;//переменная obj теперь ссылается на this который в данном контексте ссылается на сам объект (см замыкания)

  //создаем кнопку и сохраняем ссылку на нее в соответствующем свойстве объекта
  this.firstButton = $('<input type="button" value="first-button"/>')
                        .appendTo(this.$obj)//отрисовываем кнопку в контейнер
                        .click(function(){obj.createSecondButton()});//вешаем событие на клик по кнопке, так как указатель this в этом месте не ссылается на текущий объект то используем для доступа к текущему объекту ранее созданную переменную obj 
}

//метод создает вторую кнопку
MyWTFObject.prototype.createSecondButton = function()
{
  var obj = this;
  this.firstButton = $('<input type="button" value="second-button"/>')
                        .appendTo(this.$obj)
                        .click(function(){obj.showOk()});
}

//метод аллертует "ok"
MyWTFObject.prototype.showOk = function()
{
  alert('ok');
}

/*----------------------------------------------*/
$(function()
{
  //зоздаем экземпляр в глобальной области видимости(т.е. просто делаем его свойством window)
  window.wtfObject = new MyWTFObject();
});


Цитата:

Сообщение от yambbkru (Сообщение 122541)
Зачем использовать прототип? Почему просто нельзя добавить свойства и методы объекту?

Потому что это будет уже не ООП.


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