2014-12-20 4 views
0

"Game"이라는 클래스가 있는데 그 안에는 "inventory (id)"함수를 호출하는 "inventory"라는 속성이 있습니다.이 함수는 모든 인벤토리 함수가 만들어지고 보관되는 곳입니다. 명확한 혼란.클래스 내에서 중첩 된 함수 호출 JavaScript

나는 (그것을 자기 explanitory해야 새로운 객체

var Game = new Game(body, mainElement, inventoryItems, statusElement); 

을 만든, 몸이 몸 태그를 선택하는 것입니다, 주요 요소는 내 주요 지역, 상태가 상태 요소이며, 물론 inventoryItems이다 <ul>입니다. 내 항목을 추가하는 데 사용하고 있습니다.) - 더 잘 이해할 수 있도록 코드를 확인할 수 있습니다.

당신이 지금 나에게

function Game(body, mainElement, inventoryItems, statusElement) { 
    this.body = body; 
    this.main = mainElement; 
    this.inventory = Inventory(inventoryItems); 
    this.status = statusElement; 
} 

function Inventory(y) { 
    this.element = y; 
    this.create = function(itemName, equippable, sellable) { 
    this.element.append(function(){ 
     var item = ''; 

     if (itemName.length > 0) { 
     item += "<li>" + itemName; 

     if (sellable) { 
      item += "<label>Sell<input type='checkbox' name='sell' onclick='javacript: confirmSell(this);' /></label>"; 
     } 

     if (equippable) { 
      item += "<label>Equip<input type='checkbox' name='equip' onclick='javacript: equip(this);' /></label>"; 
     } 
     } 
     return item; 
    }, this.element); 

    } 
} 

var Game = new Game(body, mainElement, inventoryItems, statusElement); 
Game.inventory(create("Bronze Knife", true, true)); 
Game.inventory(create("Ramen Noodles", false, true)); 
Game.inventory(create("Boots w/da Fur", true, true)); 

도움을 필요로하는 주요 코드는 내가 재고 호출하려고 할 때, 나는 재미 오류가 발생할 수 ((생성을 문자열, 부울, 부울));

첫 번째 항목을 생성하므로 적어도 "무언가"가 "다소"올바르게 수행되고 있음을 알고 있습니다. 그렇지 않으면 전적으로 잘못되어 내 컴퓨터를 종료 할 자격이 있습니다.

크롬에서 나는 청동 나이프 inventory.create가 정의되지 않은 것은 기능이 아니라고 말하고 있습니다.

은 어떤 도움이 크게

을 감사 편집 : link

+1

'새 인벤토리 (...)'를 사용해야합니다. – Bergi

+0

'Game' 생성자를 인스턴스로 덮어 쓰면 안됩니다. 'var game = new Game (...)'을 사용하십시오. – Bergi

답변

3

Game.inventory의 이름을 바꿀 수

봅니다이

..... 
    this.inventory = new Inventory(inventoryItems); 
    ..... 

    var Game = new Game(body, mainElement, inventoryItems, statusElement); 

    Game.inventory.create("Bronze Knife", true, true); 
    Game.inventory.create("Ramen Noodles", false, true); 
    Game.inventory.create("Boots w/da Fur", true, true); 

데모 등이 메소드를 호출 할 수 있도록 방법 create를 포함 (Inventory 객체 (Inventory 전에 new)를 추가 참조) 객체이다 : http://codepen.io/tarasyuk/pen/yyJGJK

1

Game 함수이며, 당신이 Game라는 변수를 정의하고 있습니다. var Game = new Game(...);-var game = new Game(...);

0

인벤토리 작성시에는 new을 사용하십시오. 인벤토리 객체의 속성이므로 점 표기법을 사용하여 인벤토리 메소드에 액세스합니다.

향후
// Relevant changes shown: 

function Game(body, mainElement, inventoryItems, statusElement) { 
    this.inventory = new Inventory(inventoryItems); 
} 

Game.inventory.create("Bronze Knife", true, true); 

, 당신은 JSLint 같은 린터를 통해 코드를 실행하려고 할 수 있습니다. "지저분한 공백"옵션을 해제하거나 파일 상단에 /*jslint white: true */을 추가하면이 문제를 직접 해결하는 방법에 대한 유용한 의견을 얻을 수 있습니다.

JSLint를 통해 코드를 실행했는데 가장 먼저 주목 한 것은 "인벤토리가 정의되기 전에 사용되었습니다." 그래서 인벤토리를 게임 위로 옮겼습니다. JSLint를 다시 실행했고 "누락 된 '새로운'것을보고했습니다." 마지막으로 보고서를 살펴본 결과 "create"가 정의되기 전에 사용 된 것을 발견했습니다. " 이 두 가지 데이터 포인트는 올바른 방향으로 당신을 암시 할 수 있습니다.

관련 문제