티스토리 뷰
* 함수의 사용
function isNimble(){ return true; } var canFly = function(){ return true; }; window.isDeadly = function(){ return true; }; //함내의 함수 function stealthCheck() { var ret = stealth() == stealth(); assert( ret, "함수함수!" ) return true; function stealth(){ return true; } } stealthCheck(); var obj = {}; var fn = function(){}; obj.prop = "some value"; fn.prop = "some value"; assert( obj.prop == fn.prop,"Both are objects, both have the property." ); var store = { id: 1, cache: {}, add: function( fn ) { if ( !fn.id ) { fn.id = store.id++; return !!(store.cache[fn.id] = fn); } } }; function ninja(){} assert( store.add( ninja ), "Function was safely added." ); assert( !store.add( ninja ), "But it was only added once." ); var object = {}; function fn(){ return this; } assert( fn() == this, "The context is the global object." ); assert( fn.call(object) == object,"The context is changed to a specific object." ); function add(a, b){ return a + b; } assert( add.call(this, 1, 2) == 3,".call() takes individual arguments" ); assert( add.apply(this, [1, 2]) == 3,".apply() takes an array of arguments" ); function loop(array, fn){ for ( var i = 0; i < array.length; i++ ) { if ( fn.call( array, array[i], i ) === false ) break; } } var num = 0; loop([0, 1, 2], function(value, i){ assert(value == num++,"Make sure the contents are as we expect it."); }); function smallest(array){ return Math.min.apply( Math, array ); } function largest(array){ return Math.max.apply( Math, array ); } assert(smallest([0, 1, 2, 3]) == 0, "Locate the smallest value."); assert(largest([0, 1, 2, 3]) == 3, "Locate the largest value."); function merge(root){ for ( var i = 1; i < arguments.length; i++ ) for ( var key in arguments[i] ) { root[key] = arguments[i][key]; } return root; } var merged = merge({name: "John"}, {city: "Boston"}); assert( merged.name == "John", "The original name is intact." ); assert( merged.city == "Boston","And the city has een copied over." );
Timer
var timers = { timerID: 0, timers: [], start: function(){ if ( this.timerID ) return; (function(){ for ( var i = 0; i < timers.timers.length; i++ ) if ( timers.timers[i]() === false ) { timers.timers.splice(i, 1); i--; } timers.timerID = setTimeout( arguments.callee, 0 ); })(); }, stop: function(){ clearTimeout( this.timerID ); this.timerID = 0; }, add: function(fn){ this.timers.push( fn ); this.start(); } }; var box = document.getElementById("box"), left = 0, top = 20; timers.add(function(){ box.style.left = left + "px"; if ( ++left > 50 ) return false; }); timers.add(function(){ box.style.top = top + "px"; top += 2; if ( top > 120 ) return false; });
정규 표현식
var re = /test/i; var re2 = new RegExp("test", "i"); assert( re.toString() == "/test/i","Verify the contents of the expression." ); assert( re.test( "TesT" ), "Make sure the expression work." ); assert( re2.test( "TesT" ), "Make sure the expression work." ); assert( re.toString() == re2.toString(),"The contents of the expressions are equal." ); assert( re != re2, "But they are different objects." );function find(className, type) { var elems = document.getElementsByTagName(type || "*"); var re = new RegExp("(^|\\s)" + className + "(\\s|$)"); var results = []; for ( var i = 0, length = elems.length; i < length; i++ ) { if ( re.test( elems[i].className ) ) results.push( elems[i] ); } return results; } assert( find("ninja", "div").length == 3,"Verify the right amount was found." ); assert( find("ninja").length == 3,"Verify the right amount was found." ); function RegMerge() { var expr = []; for ( var i = 0; i < arguments.length; i++ ) expr.push( arguments[i].toString().replace(/^\/|\/\w*$/g, "") ); return new RegExp( "(?:" + expr.join("|") + ")" ); } var re = RegMerge( /Ninj(a|itsu)/, /Sword/, /Katana/ ); assert( re.test( "Ninjitsu" ),"Verify that the new expression works." ); assert( re.test( "Katana" ),"Verify that the new expression works." );
'웹개발 > Javascript' 카테고리의 다른 글
자바스크립트 With Statements (0) | 2010.09.10 |
---|---|
자바스크립트 정규식 예제 (0) | 2010.09.10 |
템플릿 메서드 패턴 (0) | 2010.07.15 |
커맨더 패턴 ( Command Pattern ) (0) | 2010.07.13 |
자바스크립트 Observer 패턴 예제 (1) | 2010.07.05 |
댓글