2012-03-10 2 views
0

리터럴을 통해 객체를 만들고 'new'연산자를 사용하여 인스턴스를 만들었습니다. 그러나 그것은 작동하지 않습니다. 내가 인스턴스화하는 동안 개체 이름 뒤에 괄호를 사용하여 시도object litrals 인스턴스화가 작동하지 않음

var rectangle = { 
    upperLeft : { x : 2, y : 2 }, 
    lowerRight : { x : 4, y : 4} 
} 
var r=new rectangle; 
alert(r.upperLeft.x) // will yield 2 

: 여기 내 코드입니다

var r=new rectangle; 

하지만 그 또한 작동하지 않습니다. 함수 문을 사용하여 객체를 만들려고했는데 제대로 작동하지만 이렇게하고 싶습니다. 도움.

답변

0

rectangle가있다, Object Literal. 생성자 함수가 아니며, Object의 단일 인스턴스입니다.

function Rectangle(ul,lr){ 
    var default = {x:0,y:0}; 
    return { 
      upperLeft: ul || default, 
      lowerRight: lr || default 
     }; 
} 

var r1 = new Rectangle({x:2,y:2},{x:4,y:4}), 
    r2 = new Rectangle({x:3,y:3},{x:5,y:5}), 
    r3 = new Rectangle; 

r1.upperleft.x; //=> 2 
r2.upperleft.x; //=> 3 
r3.upperLeft.x = 5; 
r3.upperLeft.y = 7; 
alert(r3.upperLeft.x; //=> 5 
1

당신은 아마 그것이 여기

var r = Object.create(rectangle); 

의미 :이

사각형의 무리를 생성하는 자바 스크립트의 "오래된"방법은 new 연산자를 사용하는 것입니다 http://jsfiddle.net/Cra8Q/

칙. 그렇게하는 방법은 다음과 같이이다 :

function Rectangle(x1, y1, x2, y2) { 
    this.upperLeft = {x: x1, y: y1}; 
    this.lowerRight = {x: x2, y: y2}; 
} 

var r = new Rectangle(2, 2, 4, 4); 

alert(r.upperLeft.x); 

는 문제의 코드로는 사용할 수 없습니다 수 있도록 rectangle은, 실제 사각형 객체가 아닌 생성자이었다이었다 http://jsfiddle.net/uDs3N/

문제를 참조하십시오 new. 연산자 new은 함수 호출 전에 만 사용할 수 있습니다.

즉,보다 현대적인 방법은 원형 사각형 오브젝트를 생성하고 Object.create으로 새 사각형을 만드는 것입니다. 그러나, 생성자 접근법은 여전히 ​​대중적입니다.

+0

그래, 작동하지만 새 연산자를 사용하여 문제가 뭐죠?생성자가이 작업을 할 수 있습니까? – Sourabh

+0

오, 당신의 의도가 _constructors_를 사용하려는 것이라면, 나는 그것을 내 대답에 추가 할 것입니다. –

0

"새로운"연산자를 사용하여 객체를 생성하는 다른 방법은 다음과 같이 생성자 함수를 정의하는 것입니다 : 당신이 눈치

var Rectangle = function() 
{ 
    this.upperLeft = { x : 2, y : 2 }, 
    this.lowerRight = { x : 4, y : 4} 
} 

var rect = new Rectangle(); 
alert(rect.upperLeft.x); 
+0

질문을 읽었을 때 함수 문을 사용하여 개체를 만들려고했지만 잘 작동한다고 언급했지만이 방법으로이 작업을 수행하려고합니다. Thanx – Sourabh

+0

순수 JS에서 객체 리터럴에 "new"를 사용할 수 없습니다. 함수 만 사용합니다. 리터럴에서 개체를 만들려면 손으로 만든 "복제"기능을 만들거나 예를 들어 프레임 워크에 이미 제공된 기능을 사용해야합니다. –

0

new 운영자가 기능 아닌 오브젝트를 : 당신이 더 많은 인스턴스를 갖고 rectangle을 원하는 경우에, 같은 것을 사용합니다. 당신이하려는 것은 효과가 없을 것입니다. var r = new Rectangle()의 작동

function Rectangle() { 
    this.upperLeft = {x: 2, y: 2}; 
    this.lowerRight = {x: 4, y: 4}; 
} 

var r = new Rectangle(); 

부분이 유사합니다 :

new 작품이 어떻게

new
을 무엇으로까지 상당에서 입니다
var r = {}; 
Rectangle.call(r); // makes r available as `this` in the function 

; 그것은 모든 종류의 프로토 타입 마술과 다른 것들을 버리고 있습니다.

그러나 이는 new에 대한 인수가 함수 여야하는 이유를 보여줍니다.

관련 문제