2017-10-06 12 views
0

저는 Duckuino라는 프로젝트의 공동 작업자입니다. 모듈에 new Object()이라는 다른 파일의 내용을 실행하는 eval()이로드되어 있습니다. 코드를 두 번 반복하지 않으려면 항목에 별칭을 지정하고 싶습니다.개체 인라인 정의에서 항목을 복제하는 방법은 무엇입니까?

new Object({ 
    commands: { 
    aVeryComplexCommand: function(WithParams) { 
     // Complex content 
    }, 
    anAliasForTheCommand: //something which point to 'aVeryComplexCommand' 
    } 
}); 

는이 eval()에 의해 잘못 해석 될 수 있고, 내가 별칭 모듈 별이기 때문에 모듈을로드하는 코드를 수정하지 않기 때문에 나는 new Object() 선언 한 후 코드를 삽입 할 수 있습니다.

미리 감사드립니다.

편집 : Pointy와 Nathan P. 모두의 답변이 효과적이므로 다른 공동 작업자와 의논하여 해결해 드리겠습니다.

+2

합니다. 별도의 성명서를 사용해야합니다. – Pointy

+0

@Pointy :'this' 문이나 뭐 다른 해결 방법이나 이상한 코드가 없습니까? – Nurrl

+0

내 대답보기; 'this'는 객체 이니셜 라이저와 관련이 없습니다. – Pointy

답변

3

별도의 문을 사용해야 할 것 : 유효한 자바 스크립트를하지만 그건 당신의 eval() 메커니즘을 혼동 여부를 내가 말할 수

new Object(function() { 
    var obj = { 
    commands: { 
     aComplexCommand: { ... } 
    } 
    }; 
    obj.commands.alias = obj.commands.aComplexCommand; 
    return obj; 
}()); 

합니다.

+0

지금 당장 노력하고 있습니다 ^^ – Nurrl

1

어쩌면 당신은 프록시와 같은 기능을 사용하여, 같은 것을 할 수 있습니다 : 당신은 자바 스크립트에서 개체 초기화 할 수 없습니다

var o = new Object({ 
 
    commands: { 
 
    aVeryComplexCommand: function(With, Params) { 
 
     console.log('This is complex !', With, Params); 
 
    }, 
 
    anAliasForTheCommand: function() { 
 
     var args = [].slice.call(arguments); 
 
     return this.aVeryComplexCommand.apply(this, args); 
 
    } 
 
    } 
 
}); 
 

 
o.commands.anAliasForTheCommand('hello', 'world');

+1

당신은 완벽한 양방향 프록시가 되겠다는 것을 잊어 버렸지 만 작동합니다. 다른 공동 작업자와 함께 사용할 내용을 알아낼 것입니다 ^^ 감사합니다 : D – Nurrl

+0

맞아, 고마워. :) –