2013-01-24 3 views
2

개체 리터럴은 정적 개체로 간주됩니다.개체 리터럴 및 정적 변수

그래서,해야는 정적 변수를 포함하지만, 코드

var obj = { 
    a : "hello", 
    foo : function(){ 
     console.log(this.a); 
     console.log(obj.a); 
    } 
}; 

의 다음 작품에서 나는 정적 방법 obj.a과 비 고정 방식 this.a에, a에 액세스 할 수 있습니다 개체 리터럴.

a은 정적 변수입니까?

+0

"개체 리터럴은 정적 개체로 간주됩니다." 정말? – bfavaretto

+0

정적 변수는 대부분의 언어에서'Type.var'과'this.var'를 통해 참조 할 수 있습니다.'this.var'를 사용하여 참조 할 수 있다면 그것이 비 정적이되지는 않습니다. – mellamokb

+0

@bfavaretto 싱글 톤처럼 동작합니까? 그리고 당신은 할 수 없어 var b = new obj(); – JohnJohnGa

답변

5

나는 다른 것들을 혼란스럽게 생각합니다.

a이라는 필드가있는 obj이라는 개체를 만들었습니다. 이 필드는 obj.a (또는 원하는 경우 obj['a'])으로 액세스 할 수 있습니다. 다른 변수가 obj을 참조하도록 조정하면 해당 변수를 통해 사용할 수도 있습니다. 다른 변수 obj을 가리 키도록하기 위해 배치

편도 함수/클로저로 정의 obj의 필드를 가지고, 그리고 obj.foo() 같이, "메소드"신택스를 사용하여 호출 할 수있다. 즉, foo의 본문 내에서 해당 호출 기간 동안 특수 변수 thisobj을 참조합니다. 따라서 해당 함수 내의 코드는 을 통해 obj.a에 액세스 할 수 있습니다.

아무 것도 정적 범위 대 동적 범위, 싱글 톤 또는 "클래스"대 "인스턴스"구성원 또는 그 중 아무 것도 없습니다. 그것은 단지 대상 일뿐입니다.

+3

이 더 중요합니다 - 당신은'var func = obj.foo'와 같은 것을 할 수 있고'this' 참조를 깨뜨릴 수 있습니다! – Christoph

1

obj.a은 "정적"입니다. new obj()을 사용할 때 이런 식으로 this 만 사용하게됩니다. 따라서 obj이 함수 여야합니다.

기본적으로 this은 개체 구성원 인 함수 내에서 사용될 때 부모 개체를 참조합니다. 코드 obj의 경우 부모 개체입니다.

하여 시제품 및 this의 예 :

var Obj = function(){this.a = "hi"}; 
Obj.prototype.foo = function(){ 
    console.log(this.a); 
} 
Obj.b = "sth"; 
var myObj = new Obj(); 
myObj.foo(); // "hi" 
console.log(myObj.b); // undefined 
3

리터럴 객체가 아닌 정적 클래스, 그것은 Object의 인스턴스이다 이고; 따라서 obj.a은 정적 일 수 없습니다. 아마도 혼란이 {} 표기가 실제로 객체를 생성한다는 사실에있다 :

정적 속성에만 클래스 -에서 의미가

var obj = new Object(); 
obj.a = 'hello'; 
obj.foo = function() {} 

결론 :

typeof { 
    a : "hello", 
    foo : function(){ 
     console.log(this.a); 
     console.log(obj.a); 
    } 
}; 

"object" 

그것은 동등의 JavaScript에서 클래스의 동일한 개념은 틀림없이 존재하지 않습니다.