'JavaScript'에 해당되는 글 2건

가끔식 개발을 하다 보면 햇갈리는 부분이 간혹 생겨서 이번 기회에 정리하고자 나름 웹서핑을 하여 결론을 정리해보았습니다.

자바스크립트는 call by value 만 존재한다는 게시글과 call by value, call by reference 둘 다 존재한다는 게시글도 제법 보였습니다.

function callByValue(a) {
	
    a = 55;
    console.log(a);
    
}

var a= { obj : 44 };

 

해당 함수를 콘솔에 실행하면 아래와 같은 결과 값이 도출됩니다.

 

 

 

callByValue 함수에 a변수를 호출하면 a의 값이복사되어 전달되어 함수 내부에서 a에 값이 55로 바뀌어 출력됩니다.

console.log로 a변수를 호출하면  위에 값이 {obj : 44 } 값이 출력되는 것을 확인할 수 있습니다.

 

 

function callByValue2(o) {
    o.obj = 55;
    console.log(o);
    
}

var a = { obj : 44};

 

 

객체의 obj를 매개변수로 호출하여 함수 스코프네에서 객체값을 수정할 경우 참조된 객체 값이 수정된 상태를 유지합니다.

이를 Call by Sharing이라는 용어로 표현하기도 합니다.

 

 

결론적으로 자바스크립트는 Call by Value만 존재합니다.

블로그 이미지

클라인STR

,

1.객체 리터럴

객체를 생성하는 가장 일반적이고 간편한 자바스크립트 객체 생성 방식이다. 리터럴 방식은 객체 리터럴을 의미하는 {} 내부에 프로퍼티와 메서드를 정의(포장)하는 구조이다.

var user = {
name : "kiuk",
age : 10 ,
showInfo : function (){
document.write("name =" +this.name+", age="+this.age);
}
}
user.showInfo();

리터럴 방식은 클래스를 정의함과 동시에 자동으로 인스턴스가 만들어진다. 즉 인스턴스를 만들기 위해 다른 작업을 해주지 않아도 된다. 하지만 다른 클래스 정의 방법과 달리 인스턴스를 하나 이상 만들 수 없는 단점을 가진다.

2. 함수방식(function)

함수방식에 경우 하나의 함수 내부에 프로퍼티와 메서드를 정의하는구조이다. 프로퍼티와 메서드는 반드시 자기 자신을 나타내는 this에 정의해야 한다. 
javascript는 클래스를 만들기 위한 키워드가 따로 존재하지않는다. (ES6 에서는 지원함 -_-) 
일반적으로 함수이름은 소문자로 시작하며, 클래스는 대문자로 시작한다.

function User(){
this.name = 'kiuk';
this.age = '10';
this.showInfo = function(){
document.write("name =" +this.name+", age="+this.age);
}
}
var user = new User();
user.showInfo();

3. 프로토타입(prototype) 방식

// 클래스 생성자
function User(){
this.name = "kiuk";
this.age = 10;
}
// 메서드 정의
User.prototype.showInfo = function(){
document.write("name =" +this.name+", age="+this.age);
}
var user = new User();
user.showInfo();


'자바스크립트' 카테고리의 다른 글

DOM API - Document 객체에 접근하는 API  (0) 2018.12.12
자바스크립트 객체지향 프로그래밍  (0) 2018.10.10
jqGrid 환경설정하기  (0) 2016.02.18
동적 colModel  (0) 2016.01.05
jqGrid 기본속성  (0) 2015.12.15
블로그 이미지

클라인STR

,