Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   нужна задача, чтобы попрактиковаться)) (https://javascript.ru/forum/misc/20819-nuzhna-zadacha-chtoby-popraktikovatsya.html)

melky 25.08.2011 09:44

Цитата:

Сообщение от B@rmaley.e><e (Сообщение 122291)
Опера, хромиум, FF5+:

твоё решение будет получше моего :)

<div id=a>0</div>

<script>
a=document.getElementById('a');

/* тут пропущенный кусок моего кода */
a=document.getElementById('a');

b = {p:1};// если не создать объект - error

b.watch.call( a, 'innerHTML', function(prop, oldval, newval){
    
    if(!oldval) oldval = a[prop];
    
    // вырезаем новый кусок
    newval = newval.substring( newval.indexOf(oldval)+1 ); 

    
    return oldval+newval.toUpperCase();
    
} );


a.onclick = function(){ a.innerHTML += 'abc' }

// всё хорошо. при клике к содержимому
// будет добавляться буква 'abc'
// всё статично
a.onclick = function(){ a.innerHTML += 'abc' };
</script>

systemiv 26.08.2011 13:35

А кто сможет подкинуть задачу на прототипы и наследование?
Нужно попрактиковаться.
Спасибо!

melky 26.08.2011 21:30

Цитата:

Сообщение от systemiv (Сообщение 122640)
А кто сможет подкинуть задачу на прототипы и наследование?
Нужно попрактиковаться.
Спасибо!


вот код, который заготовлен.
есть три класса(пардон, функции) и соотв. им экземпляры.

у каждого объекта свой конструктор, свои свойства. Свой прототип не у всех.
// Parent "class"
function Parent( a, b, c){ 
    this.a=a;
    this.b=b;
    this.c=c;
 };
function ParentPrototype (){
    this._a = function(){  };
    this. _b = function(){  };
    this._c = function(){ }
};
Parent.prototype = new ParentPrototype();

// Child "class"
function Child( d, e, f ) {  this.d = d;  this.e = e; this.f = f; };


// More "class"
function More( g ) {
     this.g = g;
     this.h = function(){ };
};
function MorePrototype(){
    _g = function(){ };
};
More.prototype = new MorePrototype();


создаем экземпляры.
var parent = new Parent( 'a','b','c' );
var child = new Child( 'd','e','f' );
var more = new More( 'g' );


Задача : написать функцию mix,
которая будет возвращать новый класс(объект), конструктор которого будет принимать все аргументы из конструкторов всех трёх переданных в неё аргументов. (ЩИТО?)
var Mixed = mix( parent, child, more );
var obj = new Mixed(
    'a','b','c', // Parent
    'd','e','f', // Child
    'g'          // More
);


а так же организовывать такой доступ к свойствам\методам переданных в неё объектов (наследие)
// Parent
obj._a(), obj._b(), obj._c();

// Mix
obj.g; obj.h();

typeof obj._g === 'undefined' // => true

из последнего (третьего) объекта методы\свойства прототипа наследоваться не будут.


...
надеюсь, вам понравится :) старался

tenshi 27.08.2011 20:05

> А кто сможет подкинуть задачу на прототипы и наследование?

написать фабрику классов так, чтобы каждый класс можно было использовать и как фабрику, то есть следующие фрагменты должны делать одно и тоже:

var Obj = new Factory(protoObj)
var AnotherObj = Factory(protoObj) // Obj === AnotherObj

var obj = new Obj(1,2,3) // obj instanceof Obj
var obj = Obj(1,2,3) // obj instanceof Obj


параметры указываемые при создании объекта, допустим, должны быть переданы методу init нового объекта в полном объёме (их может не быть, а может быть аж более 9000), если он определён. если не определён, то бросить исключение, мол "не знаю что с параметрами делать"

tenshi 27.08.2011 20:29

> ... чтобы при клике по div к его innerHTML прибавлялись не 'abc', а 'ABC' ?
> работать эта задачка будет только в FF (версия - хз, свежая).

ну, в такой формулировке и для ие есть решение ;-)

melky 27.08.2011 20:35

Цитата:

Сообщение от tenshi (Сообщение 122979)
> ... чтобы при клике по div к его innerHTML прибавлялись не 'abc', а 'ABC' ?
> работать эта задачка будет только в FF (версия - хз, свежая).

ну, в такой формулировке и для ие есть решение ;-)

версия от B@rmaley.e><e будет работать в IE8+

tenshi 27.08.2011 20:50

угу, только практической ценности никакой..

float 27.08.2011 21:49

Цитата:

работать эта задачка будет только в FF
<div id="a">0</div>

<script>
	var a = document.getElementById('a');
	var t = a;
	a = document.createElement('span');
	a.innerHTML = t.innerHTML;

	t.onclick = function() {
		a.onclick();
		t.innerHTML = a.innerHTML.toUpperCase();
	}

	a.onclick = function(){ a.innerHTML += 'abc';};
</script>

про сохранение значения а не упоминалось вроде, хотя наверное плохо что он не сохраняется.
ну через дум моно и это предусмотреть


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