2011-08-11 13 views
4

레거시 응용 프로그램에서 작업하고 있으며 모든 JS가 나에게 미심쩍은 것처럼 보입니다.
전에로드 된 몇 가지 불가사의 한 줄이 있는데 나는 무엇을하고 있는지 전혀 모른다.이 JavaScript는 무엇을 의미합니까?

var i2b2 = {sdx:{TypeControllers:{},Master:{_sysData:{}}},events:{},hive:{cfg:{},helpers:{},base_classes:{}},h:{}}; 
if (undefined==i2b2.hive) { i2b2.hive = {}; }  
i2b2.hive.tempCellsList = [ 
     { code: "PM", 
      forceLoading: true 
     }, 
     { code: "ONT" }, 
     { code: "CRC" }, 
     { code: "WORK"}, 
     { code: "SHRINE"}, 
     { code: "PLUGINMGR", 
      forceLoading: true, 
      forceConfigMsg: { params: [] } 
     } 
    ]; 

더 많은 varif 문이있다 그러나 그들은 다른 변수와 같은 일을하고 있습니다.
이 수수께끼를 푸는데 도와주세요. sdx, events, hive 등 그 특성은 이하 더 구성되는 복합 오브젝트를 길게

+0

오 형 ... 형식이 '정의되지 않음'과 비교됩니다. Yaiks. 이 코드를 재사용하게된다면, 스스로를 부탁하고 if (typeof i2b2.hive === 'undefined') ... '로 대체하십시오. – Flambino

+2

"너무 지역화 된"이유는 무엇입니까? IMHO 포스터가 정확히 이해하지 못하는 것을 더 잘 설명해야하지만 이것은 유효한 질문입니다. – RoToRa

+0

가능한 소스 : [i2b2_loader.js] (http://informatics.kumc.edu/work/browser/i2b2-webclient/webclient/js-i2b2/i2b2_loader.js?desc=1) –

답변

4

첫 번째 줄은 인 을 사용하여 i2b2을 초기화합니다.

var obj = {};는 중첩 된 하나 너의 고전이다

var rectangle = { 
    upperLeft: { 
     x: 2, 
     y: 2 
    }, 
    lowerRight: { 
     x: 4, 
     y: 4 
    } 
}; 

될 것

var simpleObject = { 
    property1: "Hello", 
    property2: "MmmMMm", 
    property3: ["mmm", 2, 3, 6, "kkk"], 
    method1: function() { 
     alert("my method") 
    } 
}; 

될 것입니다 쓰기 var obj = new Object();

리터럴 간단한 개체의 짧은 방법입니다.

var i2b2 = { 
    sdx: { 
     TypeControllers: {}, 
     Master: { 
      _sysData: {} 
     } 
    }, 
    events: {}, 
    hive: { 
     cfg: {}, 
     helpers: {}, 
     base_classes: {} 
    }, 
    h: {} 
}; 

두 번째 줄은해야 이럴

i2b2.hive = i2b2.hive || {}; 

이것은 단지 하이브가 정의되지 않은 경우 새 개체를 만들 수 있다고 말한다.

마지막 행은 객체 hive에 대한 tempCellsList 속성을 만듭니다. 내가 정확히 이해하지 못하는 것을 아주 확실하지 않다 는 마지막으로 객체의 새로운 배열 재산 tempCellsList

+0

그런 세부 설명을 해주셔서 감사합니다. 그래서 'sdx : {TypeControllers : {}, Master : {_sysData : {}}}'는 단지''TypeControllers : {}'와'Master'를 가진 var'i2b2'와 속성'sdx'를 의미합니까? – xyz

+0

예. 그게 다야. 전체 코드를 여기에 넣어 올바르게 읽을 수 있습니다. http://jsbeautifier.org/ – naveen

+0

내가 관찰 한 한 가지. 첫 번째 라인에서 우리는'i2b2.hive' var를 정의하고 있으며, 두번째로'undefined '인지를 확인하고 있습니다. 그것은 의미가 있습니까? – xyz

1

이 자바 스크립트 코드는 다수의 특성을 갖는다 ib2b라는 변수를 생성한다.

이 글로벌 객체는 다른 자바 스크립트 코드에서 참조 할 수 있으며 클라이언트 측 응용 프로그램에 대한 전역 구성을 저장한다는 아이디어가 있습니다.

1

에 추가됩니다 (차례로 hivei2b2의 속성이 있습니다). 두 가지 "이상한"점은 내가 설명하려고합니다 위의 코드에 대해,하지만 그게 충분하지 않습니다 경우에 당신은 당신이 이해하지 못하는 것을 잘 설명해야합니다

  1. 코드 검사 i2b2.hive입니다 is는 정의되어 있지 않은 경우 빈 객체로 설정합니다. 속성은 분명히 이전 라인에서 설정되었으므로,이 코드는 동적으로 생성되고 일부 로직 (예 :이 검사)은 자바 스크립트 코드에서 정의됩니다 (서버 측이 될 수도 있습니다). 암호. 우연히 - - 정의되지 우연히 undefined는 것을 단지 변수가 있기 때문에 undefined, 그냥 작동 JavaScript.This에 예약 된 단어가 아니기 때문에

  2. undefined==i2b2.hive는 "undefinedness"를 테스트하는 나쁜/잘못된 방법입니다. 대신 if (typeof i2b2.hive == "undefined") ... 또는 단지 if (i2b2.hive) ...을 사용해야합니다.

0

i2b2 개체에는 몇 가지 매개 변수가 설정되어있는 것으로 보입니다. 그것은 그 자체로 어떤 것도하지 않지만, 다음 실행을위한 몇 가지 기본 설정을 설정하는 것처럼 보입니다. 아래의 코드에서 유사한 문제가 있는지 살펴보십시오.

예 : i2b2.hive.tempCellList[5].forceLoadingtrue으로 설정합니다. 나중에 응용 프로그램에 if - 조건이 있습니다. 예 :

for(var i in i2b2.hive.tempCellList) 
{ 
    if(i2b2.hive.tempCellList[i].forceLoading === true) 
    { 
     // do something... 
    } 
} 
+0

고마워요. :) 앞으로 도움이 될지도 모릅니다 :) – xyz

관련 문제