2012-04-29 6 views
0

나는 HTML5에서 간단한 게임을 만드는 법에 대해 this tutorial을 따라 왔으며, 나는 이해할 수없는 매개 변수의 흥미로운 사용법을 보았습니다. 여기서는 작성자가 Bullet이라는 단일 생성자를 생성합니다 매개 변수 I,하지만 그가 어떻게 사용하는지보세요. ​​여기서 무슨 일이 일어나고있는 걸까요? 이해가 안 :JavaScript 생성자 인수

function Bullet(I) { 
    I.active = true; 

    I.xVelocity = 0; 
    I.yVelocity = -I.speed; 
    I.width = 3; 
    I.height = 3; 
    I.color = "#000"; 

    I.inBounds = function() { 
     return I.x >= 0 && I.x <= CANVAS_WIDTH && 
     I.y >= 0 && I.y <= CANVAS_HEIGHT; 
    }; 

    I.draw = function() { 
     canvas.fillStyle = this.color; 
     canvas.fillRect(this.x, this.y, this.width, this.height); 
    }; 

    I.update = function() { 
     I.x += I.xVelocity; 
     I.y += I.yVelocity; 
    }; 

    return I; 
} 

답변

2

이 튜토리얼에 따라, Bullet는 기존 개체, 보강 (추가) 속성을 취하고 다시 객체를 반환 단지 기능 생성자 아니다. 그런 다음 반환 된 객체 (추가 속성 포함)를 playerBullets 배열에 넣습니다.

playerBullets.push(Bullet({ //the Bullet call, passing an object 
    speed: 5, 
    x: bulletPosition.x, 
    y: bulletPosition.y 
})) 

Bullet에서 반환 된 객체는 다음과 같이 표시됩니다 도와

{ 
    //the passed object 
    x:..., 
    y:..., 
    speed:..., 
    //the added properties 
    xVelocity:..., 
    yVelocity:..., 
    ..., 
    update:function(){...} 
} 
+0

감사합니다,하지만 지금 내가 TEH 질문에 게시 코드 블록 전에 다음과 같은 말한다 : "다음, 우리는 필요 총알 인스턴스를 생성하는 생성자. " 그러면 생성자가 아닌 방법은 무엇입니까? –

+0

@ErickMaynard "인스턴스"를 만든 경우에는 'new' 키워드를 사용해야합니다. 생성자 함수에서 인스턴스를 생성하면'var test = new ConstructorName()'처럼 호출합니다. 이것은 객체를 나중에 반환하고'test'에 저장합니다. 그러나이 튜토리얼에서는 그렇지 않습니다. 그것은 단지 기존 객체를 가져 와서 그것을 증가시키고 반환합니다. 인스턴스가 생성되지 않았습니다. – Joseph

+0

나는 아직도 혼란스러워한다. 결국 캔버스의 화면에 "총알"을 그립니다. 그것이 탄환의 인스턴스를 생성하지 않으면 어떻게됩니까? –