Archive for the ‘Prototype’ Category

insertAfter на Prototype

Wednesday, February 27th, 2008

Небольшой prototype для вставки нового узла после указанного

Node.prototype.insertAfter = function(newNode, refNode) {
    if(refNode.nextSibling) {
        return this.insertBefore(newNode, refNode.nextSibling);
    } else {
        return this.appendChild(newNode);
    }
}

Смысл в том что в самом JavaScript отсутствует insertAfter. Для того что бы добавить узел после нужного использовался первый кусок кода node.insertBefore(newNode, refNode.nextSibling), в то время как здесь встроена еще проверка что если nextSibling отсутствует то используй appendChild иначе попросту вставь в конец.
Как это работает

<script type="text/javascript">
function makeins(){
	doc = document.getElementById("doc");
	r = document.getElementById("r2");
	p = document.createElement("LI");
	pt= document.createTextNode("3");
	p.appendChild(pt);
	doc.insertAfter(p, r);
}
</script>
...
<ul id="doc">
	<li id="r1">1</li>
	<li id="r2">2</li>
</ul>

Js in_array

Friday, December 7th, 2007

В базовом js нету метода in_array, но благодаря prototype можно добавить собстенные методы.

Array.prototype.in_array = function(p_val) {
	for(var i = 0, l = this.length; i < l; i++) {
		if(this[i] == p_val) {
			return true;
		}
	}
	return false;
}

теперь можно использовать

var v_array = [ 5, 10, 15, 20, 25];
v_array.in_array(10);  // true
v_array.in_array(11);  // false

Не забыть про черту

Thursday, November 22nd, 2007

FireFox быстро приучает к хорошему, порой забываешь, что-то может не работать. Например определение кодировки utf-8. Mysql понимает кодировку utf8, php понимает кодировку utf8, и наконец ее понимает FireFox. Все работает здорово пока в один день не понимаешь, что MSIE не понимает твой Ajaх запрос посланный в XML и все из за того, что он прописан как utf8, а не utf-8. Поэтому важно следить за этим.

JS Date и номер недели

Friday, August 3rd, 2007

Вот небольшой скриптик на получения номера дня недели через javascript. воспользуемся для этого прототипом для расширения возможностей стандартой Date();

Date.prototype.getWeek = function() {
  var onejan = new Date(this.getFullYear(),0,1,0,0,0);
  return Math.ceil((((this - onejan) / 86400000) + onejan.getDay())/7);
}

var p= new Date();

document.writeln(p);
document.writeln(p.getWeek());

А вот ответ

Fri Aug 03 2007 13:18:18 GMT+0400
31

Создание prototype класса

Thursday, August 2nd, 2007

Создание prototype класса

Хотя прототипы и работают по типу классов в JavaScript, однако объявляются они вовсе не так как в других, знакомых мне языках

Конструктор, он же класс

function point(mydrag){
	this.mydrag=mydrag;
}

Переменные класса

point.prototype.mydrag;
point.prototype.myslide=5;

Метод класса

point.prototype.test=function(){
	alert(this.myvar);
}

Объявление, присвоение и вызов

var mypoint = new point(5);
mypoint.myvar=10;
mypoint.test();

setTimeout и Prototype

Monday, July 23rd, 2007

setTimeout позволяет вызвать функцию через определенное время

pointer.prototype.makeDrag=function(){
	...
}
pointer.prototype.launch=function(){
	setTimeout(this.makeDrag, 1000);
}

но не смотря на то что this.makeDrag стандартна для запуска прототайпных функция в этом случае оно работать не будет, сделать придется следующее

pointer.prototype.launch=function(){
	var self = this;
	setTimeout(
	function(){ self.makeDrag();}
	, 1000);
}