JavaScript

コンストラクタをapplyする

新しいオブジェクトを定義するには、やり方や好みで色々ある。■まず単純にコンストラクタ定義する方法 var Cat=funtion(name){ this.name=name; }; Cat.prototype.bark=funtion(){ alert('にゃー'); }; var mycat=new Cat('ミケ'); console.log(mycat.name, …

jQueryで要素の順番

jQueryオブジェクトで、指定の位置(順番)だけに何かしたいときには、いくつかやり方があるようだ。 (やり方はひとつだけでない、ということは非常によくある) <ul> <li>あ</li> <li>い</li> <li>う</li> <li>え</li> <li>お</li> </ul> 2番目のやつに何かしたいとき。 メソッド 先頭は0から。 $('ul > li').eq(1) セ…

jQueryのeachを逆順から回したい

$($("div").get().reverse()).each(fucntion(){ ... }) いったん通常のDOM配列にしてから逆順にし、さらにjQueryオブジェクトに戻してeach。しかし、これだとeach自体は正順で回っているので、 本当は降順にアクセスできたらいいのだけど。 拡張しやがれとい…

jQueryで要素の存在チェック

例えばid="elem"という要素について存在チェックを行うとき。 getElementById()の発想でやるとだめみたい。 これだと必ずtrueになる。 if($("#elem")){ … } メソッドまで拾ってやる必要がある。 if($("#elem").size()>0) if($("#elem").length) if($("#elem"…

スコープとかevalのメモ

var x=0; (function(){ x=1; var x=2; console.log(x); //2 })(); console.log(x); //0 グローバルとローカルにxという同名の変数が扱われているとして、ポイントは無名関数内の最初のx=1の代入部分、そして、その下のvar宣言。 var宣言は、どこにあろうとも…

applyのこと

まず、applyはFunctionオブジェクトのメソッドである(callについては割愛)。 ほとんど忘れていたのでメモ。 applyを知る上ではthisの意味が重要。 function Func1(name){ this.name=name; } function Func2(){ this.exec=function(){alert(this.name)}; } va…

window.onloadが2回以上あるとき

window.onloadを同一ページ内でうっかり2回使ってしまうと、1回目の処理は行われず、後者のイベントに上書されてしまいます。 window.onload=function(){ //色々な処理 } window.onload=func2; //2回目 これは、windowオブジェクトのプロパティonloadに関数…

jQueryセレクターでの出来事

a要素のリンク先が画像だったらfancyboxを発動しようと思い(fancyboxに限ったものではないが)、安易に書いたがどうやらこんなデタラメでは無理なよう。 $('a[href$=.'+/(jpg|png|gif)/+']').fancybox(); 普通にこうやれば要件は満たされるが、好ましくはない…

import.jsを思い出したように直した

http://d.hatena.ne.jp/ynsyns/20090227 createElementは1回だけにして、cloneNodeで複製。 //import.js (function(){ var js=['a.js','b.js','c.js']; var head=document.getElementsByTagName('head')[0]; var script=document.createElement('script'); s…

Functionコンストラクタ

特徴として以下。 コードの実行時に動的に生成しコンパイルできる コンストラクタを使う度に新しい関数オブジェクトが生成される(非効率の問題) 静的スコープを使わず、トップレベルの関数としてコンパイルされる 3については重要 関数リテラルの場合 var …

with文 ブロックスコープ

withと言えばオブジェクトを省略できる 例えば document.write('hoge'); document.getElementById('body'); //↓すっきり with(document){ write('hoge'); getElementById('body'); } コードの冗長を防げる。 ブロックスコープ javascriptでは基本的にブロッ…

宣言時の引数と渡された引数の比較

function f(arg){ // 宣言時の引数の数と渡された引数の数の比較 // 左辺は関数自身Functionオブジェクトのlength // 右辺はローカル変数argumentsオブジェクトのlength return arguments.callee.length==arguments.length; } f(1); //true f(1,2); //false …

配列でメソッド

javascriptでは配列要素の型は問われない、また配列はObjectの一種ということで、 一見違和感があるが、こんな書き方もできる。 var a=["hoge",function(x){alert(x)}]; a[1](a[0]);

JavaScriptのimport、並列ロード

並列ロード(ブロック回避)を利用して、CSSの@importみたくできるかなと。 その前に、 document.writeを利用したやつ これをひとつのimport.jsとかにまとめて、HTMLからそいつを読み込めばOKって。以前に誰かがやっていた。 document.write('<script type="text/javascript" src="a.js" ></script>\n'); document…

使い捨て関数の戻り値を引数として実行する匿名関数

(function(x){alert(x);})( (function(y){return y;})( (function(){return "z";})() ) ); >>> "z" こういう書き方ができるということを思いもよらなかった。というメモ

for/inでオブジェクトのプロパティ名を配列にコピー

オブジェクトのプロパティを走査するのにfor(variable in object)文がある。 var o={x:"New",y:"Year"}; var s=""; for(var p in o) s+=o[p]; variableは代入式の左側として適切なものであればどんな式でも記述できる。 つまり、ループの実行ごとに違う変数…

グローバル変数

グローバル空間でのvar宣言、function関数定義 var a; function b(){alert("hoge");} // var b=function(){alert("hoge");} と同義 これらはグローバル変数として扱われるが、結局グローバル変数とはwindowオブジェクトのプロパティに他ならない。 なので、…

CSSのようなprototype

CSS(Cascading Style Sheet)の継承 (IEでのバグは考慮しない) まず前提として親→子へ継承するものとしないもの。 継承されるのはインラインなプロパティ。もっぱらfont関係。 color,text-align,font-size,font-family,line-height... ボックスのプロパティは…

プリミティブとオブジェクト

JavaScriptにおける型は厳格ではない。 プリミティブ型の数値、文字列、論理値には、それぞれNumber、String、Booleanというラッパークラスがある。 必要に応じて内部的にラッパーオブジェクトが生成され、役目が終わると破棄される。 newしたNumber、String…

Object

オブジェクトのプロパティ(メソッド)には文字列でアクセスできるということ。 //以下の2つは同じ window.alert("あらーと"); window["alert"]("あらーと"); Objectオブジェクトの作成では次の1〜4は同じ。 //1 var obj=new Object(); obj.prop="foo"; //2 va…

getElementsByClassName

getElementsByClassName、IE6,7とかでは使えない。 それじゃ。これで良いと思った。 function getElmClass(class){ var elms=[]; var nodes=document.getElementsByTagName('*'); for(var i=0;i