본문 바로가기

javascript

유용한 자바스크립트 함수들


요즘 자바스크립 공부를 하고 있는데... 아 정말 어렵다.

아래 내용은 책 JavaScript The Definitive Guide 5/E에서 발췌한 내용이며

유용한 자바스크립트 함수들이다. 사용법을 익혀두자!

객체용 함수들


		// 객체 o의 열거 가능한 프로퍼티들의 이름을 담은 배열을 반환한다.
		function getPropertyNames(/* object */ o)
		{
			var r = [];
			for(name in o) r.push(name);
			return r;
		}

		//객체 from의 열거 가능한 프로퍼티들을 객체 to로 복사한다.
		//만약 to가 null이면 새로운 객체를 생성한다. 이 함수는 결과로 개체 to를 반환하거나
		//새롭게 생성한 객체를 반환한다.
		function copyProperties(/* object */ from, /* optional object */ to)
		{
			if(!to) to = {};
			for(p in from) to[p] = from[p];
			return to;
		}

		//객체 from의 열거 가능한 프로퍼티들을 객체 to로 복사하되,
		//to에 의해 정의되지 않은 프로퍼티만 복사한다.
		//이 함수는 to에 미리 정의되어 있지 않은 값들에 대해 from에 저장해 둔
		//기본 값들을 사용하려 할 때에 유용하다.
		function copyUndefinedProperties(/* object */ from, /* object */ to)
		{
			for(p in from){
				if(!p in to) to[p] = from[p];
			}
		}

배열용 함수들

		//배열 a의 각 원소를 지정된 술어(predicate) 함수로 전달한다.
		//술어 함수가 true를 반환한 원소들로 이루어진 배열을 결과로서 반환한다.
		function filterArray(/* array */ a, /* Boolean function */ predicate){
			var results = [];
			var length = a.length;	 //술어 함수가 배열의 길이를 반환할 경우에 대비하여
			for(var i = 0; i < length; i++) {
				var element = a[i];
				if(predicate(element)) results.push(element);
			}
			return results;
		}

		//배열 a의 각 원소를 지정된 함수 f로 전달하여 얻은 결과들을 원소로 하는
		//배열을 반환한다.
		function mapArray(/* Array */ a, /* function */ f) {
			var r = [];
			var length = a.length;	 //함수 f가 배열 길이를 변환할 경우에 대비하여
			for( var i = 0; i < length; i++) r[i] = f(a[i]);
			return r;
		}

함수용 함수들

		//함수 f를 객체 o의 메서드로 하여 호출하는 독립형(standalone) 함수를 반환한다.
		//이것은 메서드를 함수에 전달하려 할 때 유용한다. 만약 함수를 그 함수의 객체와
		//연결하지 않으면, 그 연관 관계는 소실되며 전달한 메서드는 일반 함수처럼 호출된다.
		function bindMethod(/* object */ o, /* function */ f) {
			return function() { return f.apply(o, arguments) }
		}

		//함수 f를 지정된 전달인자와 함께 호출해 주는 함수를 반환한다.
		//이렇게 반환된 함수는 또한 추가적인 전달인자들과 함께 호출될 수 있다.
		//(이것은 때때로 'currying'이라 한다.)
		function bindArguments(/* function */ f, /*initial arguments ......*/) {
			var boundArgs = arguments;
			return function() {
				//전달인자들로 구성된 배열을 만든다. 이 배열은 이전에 건내받은 전달인자를 
				//원소로 시작하여, 지금 추가로 건네받은 전달인자까지 포함한다.
				var args = [];
				for(var i = 1; i < boundArgs.length; i++) args.push(boundArgs[i]);
				for(var i = 0; i< arguments.length; i++) args.push(arguments[i]);
				//이제 이 전달인자들과 함께 함수를 호출한다.
				return f.apply(this, args);
			}
		}