JavaScriptっぽい。

『JavaScriptっぽい。』の更新情報やJavaScriptに関する日記。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告|
  3. トラックバック(-)|
  4. コメント(-)

script要素のlanguage属性とtype属性

最近出版される本ではようやくlanguage属性ではなく、type属性が用いられるようになっている。 本を執筆している時点と出版された時点ではかなり状況が変わっていることもあるだろうが、それにしても2001年発行でtype属性で書かれている本もあれば、最近の本でまだlanguage属性で書かれている本もあったりして、なんだかなぁ…である。

Web上でもlanguage属性に関しては敏感に反応する向きもでてきているようだ。 でも、個人的にはlanguage属性以上に問題なんじゃないかと思うのが、JScriptの独自拡張であるdocument.allやinnerTextとか、未だにgetYearとか使っているscriptである。

どちらもW3CやECMAの規格外(getYearに関しては古い規格)であることは一緒なのだが、language属性で書いても現在あるブラウザは全部動くのに対して、document.allやinnerTextなんかだと動かないブラウザがかなりの数存在するということがある。

だから、language属性に目くじらたてるんであれば、document.allやinnerTextとか平気で使わないでほしいと思う今日この頃です。(自分も以前は使っていました。でも、language属性を使うことにはあまりうるさくはないです。もちろん、うるさくいうこと自体は悪いことでもないんですが…)

スポンサーサイト
  1. 2005/12/31(土) 18:19:29|
  2. 雑記|
  3. トラックバック:0|
  4. コメント:0

「あどぶいら」とトラックバック

第一回「ゲイトラ」SEOコンテストに参加してあどぶいらに関するトラックバックを打ってみて分かったことは、ウェブリブログからFC2ブログへのトラックバックが普通に打てないことと、FC2ブログからAmebaブログへのトラックバックが普通に打てないことです。

Hatenaに関してはリンクを貼っていないところからのトラックバックが打てないことはデースケドガーのときに分かっていたのですが、相手からのコメントからのリンクでも打てるみたいです。

あと、Exciteブログもデフォルトだとリンクのないところからのトラックバックを打てないように変わったようで、かなりややこしくなっていますね。

あどぶいら links

あどぶいら
The あどぶいら diary でのエントリー記事。
あどぶいら
「あどぶいらっぽい。」からのエントリー記事。
あどぶいら
JavaScriptっぽい。でのエントリー記事。
あどぶいら
SEOあどぶいらでのエントリー記事。
相互的あどぶいら
男一匹あどぶいらでのエントリー記事。
あどぶいら
超独断的ネット私論からのエントリー記事。
あどぶいら・カウントダウン
JavaScriptによるあどぶいら終了までのカウントダウン。
  1. 2005/12/30(金) 17:09:02|
  2. SEO|
  3. トラックバック:32|
  4. コメント:4

トランプ3枚当てスクリプト(その8)

12月21日正解発表分。結構難しかった。


<script type="text/javascript">
/*
*1.クラブは使用していない。		
*2.3枚の中で2枚目が一番大きい
*3.3枚の数字を全て足すと30以上
*4.ハートを使用
*5.2枚目 - 1枚目 = 1

	1.マークの配列はハート、スペード、ダイヤ
	2.数字の配列は5~13
	3.1枚目の記号はランダム
	4.3枚の合計が30以上
	5.1枚目と2枚目を足して21以上(1枚目と2枚目の差が1で、2が最大で3枚の合計が30以上だと2が9では無理)
	6.1枚目の数字は10~12でランダム
	7.2枚目の記号はランダム
	8.2枚目の数字は1枚目の数字 + 1
	9.3枚目の記号は1枚目か2枚目がハートならランダム、それ以外はハート。
	10.3枚目の数字は2枚目より小さい数字でランダムだが、1枚目と3枚目が同じ記号の場合は1枚目以外の数字	

*/

Array.prototype.random_num = null;
Array.prototype.random_elm = function(){
	this.random_num = Math.floor ( Math.random() * this.length );
	return this [this.random_num];
}

function choice_card(){
	var mark = ["heart","dia","spade"];
	var first_ary = [10,11,12];
	var num_ary = [5,6,7,8,9,10,11,12];
	var card = [];

	var first_mark = mark.random_elm();
	var first_num = first_ary.random_elm();
	var first_index = first_ary.random_num;

	var second_mark = mark.random_elm();
	var second_num = first_num + 1;

	var third_mark = ( first_mark != "heart" && second_mark != "heart" ) ? "heart" : mark.random_elm();

	if ( first_mark == third_mark ) num_ary.splice( first_index + 5 , 1 );
	var rest = 30 - first_num - second_num;
	for ( var i = 0 ; i < num_ary.length ; i++ ) if ( num_ary[i] < rest ) { num_ary.shift(); i--;}
	for ( i = num_ary.length - 1 ; i >= 0 ; i-- )if ( num_ary[i] >= second_num ) { num_ary.pop(); i++;}
	var third_num = num_ary.random_elm();

	card[0] = first_mark + first_num;
	card[1] = second_mark + second_num;
	card[2] = third_mark + third_num;
	return card.join(",");	
}

var choiced_card = [];
var i , i_max;

for( i = 0 , i_max = 30 ; i < i_max ; i++ ){
	choiced_card[i] = choice_card();
}

var choiced_str = choiced_card.join(",");
var reg_exp;
var str = "";

for( i = 0 ; choiced_card[i] ; i++ ){
	reg_exp = new RegExp( choiced_card[i] , "g" );
	if( ( choiced_str.match( reg_exp ) ).length > 1 ) {
		if( str.indexOf( choiced_card[i] ) > -1 ) {
			choiced_card.splice( i , 1 );
			i--;		//spliceするとインデックス番号がずれるのを修正
		}
		str += choiced_card[i];	
	}
}

var joint_array = choiced_card.join("<br>");
document.write ( joint_array );

</script>
  1. 2005/12/24(土) 08:28:25|
  2. トランプ3枚当て|
  3. トラックバック:0|
  4. コメント:0

継承元のコンストラクタを順々に呼び出す。

【JavaScript】多重に派生されたクラスのコンストラクタで,基底クラスのコンストラクタを呼び出す方法。 なぜ2番目のコードでダメかというと、prototypeを書き換えれば、当然constructorもprototypeの中に含まれるので、派生されたクラスが全部同じconstructorを参照してしまうから。

自分も独力ではスマートな方法は考えつかなかったけど、 KevLinDev - Tutorials - JavaScriptに書いてある方法のとおりやってみたら、あっさり解決してしまった。

ちゃんとconstructorが自分のクラス名と同一になるように書き換えた上で、SubClassにsuperclassプロパティを設けてSuperClassのprototypeを参照させ、そこからSuperClassのconstructorを呼び出してやればよいということですね。


function inherit(subClass, superClass) {
	var Temp = new Function();
	Temp.prototype = superClass.prototype;
	subClass.prototype = new Temp;
	subClass.prototype.constructor = subClass;
	subClass.prototype.superclass = superClass.prototype;
}

function SuperSuperClass() {
	alert("SuperSuperClass Constructor");

	this.p = "supersuperclass";
}

function SuperClass() {
	alert("SuperClass Constructor");
	this.superclass.constructor(); // SuperSuperClassのコンストラクタを呼び出す.

	this.q = "superclass";
}

function SubClass() {
	alert("SubClass Constructor");
	this.superclass.constructor(); // SuperClassのコンストラクタを呼び出す.

	this.r = "subclass";
}

// 継承
inherit(SuperClass, SuperSuperClass);
inherit(SubClass, SuperClass);

var a = new SubClass();
alert(a.p);
alert(a.q);
alert(a.r);
  1. 2005/12/08(木) 22:15:49|
  2. 雑記|
  3. トラックバック:2|
  4. コメント:0

トランプ3枚当てスクリプト(その7)

2週間ぶりにトライ。今回も場合の数が多かった。 初めてpopメソッドも使いました。まぁまぁうまくいったかな。


<script type="text/javascript">
/*
*1.数字は3枚とも10以下			
*2.マークは赤と黒
*3.2枚目は一番大きい数字
*4.ハートはなし
*5.1枚目は7

	1.1枚目の記号はハート以外でランダム
	2.2枚目の記号もハート以外でタンダム
	3.3枚目の記号は1枚目と2枚目が黒なら、ダイヤ。1枚目と2枚目がダイヤなら黒でランダム。それ以外ならハート以外でランダム。
	4.1枚目の数字は7
	5.2枚目の数字は[8,9,10]のランダム
	5.3枚目の数字は2枚目より小さい数字でランダム
	6.1枚目と3枚目は重複する可能性を考慮に入れる
*/

Array.prototype.random_num = null;
Array.prototype.random_elm = function(){
	this.random_num = Math.floor ( Math.random() * this.length );
	return this [this.random_num];
}

function choice_card(){
	var mark = ["dia","spade","club"];
	var black_mark = ["spade","club"];
	var large_num_ary = [8,9,10];
	var small_num_ary = [1,2,3,4,5,6,7];
	var card = [];

	var first_mark = mark.random_elm();
	var first_black = ( first_mark == "spade" || first_mark == "club" );
	var second_mark = mark.random_elm();
	var second_black = ( second_mark == "spade" || second_mark == "club" );
	var third_mark = ( first_black && second_black ) ? "dia" : (( first_black || second_black ) ? mark.random_elm() : black_mark.random_elm());

	var first_num = 7;
	var second_num = large_num_ary.random_elm();
	if ( first_mark == third_mark ) small_num_ary.pop();	//7を削除
	if ( second_num > 8 ) small_num_ary.push(8);
	if ( second_num > 9 ) small_num_ary.push(9);
	var third_num = small_num_ary.random_elm();

	card[0] = first_mark + first_num;
	card[1] = second_mark + second_num;
	card[2] = third_mark + third_num;
	return card.join(",");	
}

var choiced_card = [];
var i , i_max;

for( i = 0 , i_max = 15 ; i < i_max ; i++ ){
	choiced_card[i] = choice_card();
}

var choiced_str = choiced_card.join(",");
var reg_exp;
var str = "";

for( i = 0 ; choiced_card[i] ; i++ ){
	reg_exp = new RegExp( choiced_card[i] , "g" );
	if( ( choiced_str.match( reg_exp ) ).length > 1 ) {
		if( str.indexOf( choiced_card[i] ) > -1 ) {
			choiced_card.splice( i , 1 );
			i--;		//spliceするとインデックス番号がずれるのを修正
		}
		str += choiced_card[i];	
	}
}

var joint_array = choiced_card.join("<br>");
document.write ( joint_array );

</script>
  1. 2005/12/07(水) 20:50:56|
  2. トランプ3枚当て|
  3. トラックバック:0|
  4. コメント:3

画像をゆっくり入れ替える

自作JavaScriptサンプル画像をゆっくり入れ替えるを追加。HTML小技集の掲示板での質問に答えて作ったもの。微妙に修正しています。

  1. 2005/12/06(火) 22:47:47|
  2. 更新情報|
  3. トラックバック:0|
  4. コメント:2

変数名、関数名の付け方

以前はイヌでもわかるJavaScript講座のTatsuya氏の影響でMyとかつけたり、DOMのメソッドみたいに意味の区切りの部分で大文字を使ったりしていました。

現在はデーブ・ソー氏の影響で、できるだけ説明的な名前を付けて、英文を書くような感じで、スペースの変わりにアンダーバーを使っています。 これだと後からコードを見返すときに、どのような意図で使っている変数や関数なのかが一目瞭然なので、改造やデバッグの時間が節約できる感じです。

ちなみにこれは『WebがグンとよくなるJavaScript』という本に出ていた方法です。 内容も古くて、特にお薦めというわけではありませんが、説明の仕方が独特でちょっと面白かったりします。

  1. 2005/12/02(金) 23:08:43|
  2. 雑記|
  3. トラックバック:0|
  4. コメント:2

PUREST

11 | 2005/12 | 01
Sun Mon Tue Wed Thu Fri Sat
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

Recent Entries

Recent Comments

Recent Trackbacks

Archives

Category

Links

Search

Recommend

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。