2014-12-05 2 views
-1

미안하지만 누군가가 중괄호를 사용하지 않고 표시를 사용하여 기존 개체를 확장하는 더 나은 구문을 제안 할 수 있는지 궁금하십니까? 내 주요 목적은 들여 쓰기 스타일을 유지하는 동안 확장 된 개체를 함수로 전달하는 것입니다. 이것은 올바른 동작이 있습니다splat을 사용하여 개체 확장 및 수행

base-obj = 
    old-prop: \value 

do-something { 
    ...base-obj 
    extended-prop: \value 
} 

을하지만 중괄호는 어떻게 든 제거 할 수 있습니까?

do-something {} <<< base-obj <<< 
    extended-prop1: \value1 
    extended-prop2: \value2 

이 업데이트 : 부작용을 방지하기 위해 수정 내가 작업을 수행하지만 다소 우회적 방법으로 얻을 것이다 < < <을 발견

old-obj = 
    old-prop: \value 

do-something do 
    ...old-obj 
    new-prop: \value 

    # do-something will only see new-prop 

답변

0

: 작동하지 않습니다 '수행'이 @ homam의 제안에 따라 base-obj로 변경하십시오.

+1

'{} <<<베이스 OBJ <<< 연장 소품 : \ '값' – homam

+0

연장 소품 : \ 값 <<<베이스 - obj' – blvz

+0

@blvz는 분명하지만 작동하지 않습니다. {extendedProp : import $ ('value', baseObj)} –

2

아마 당신이 원하는 것은 with입니다 :

do-something base-obj with do 
    extended-prop: \value 

LiveScript 1.3.1 operators' docs에서 :

합니다 (cloneport 일명)와 중위 쉽게 객체 생성을위한 복제 및 재산 사본 연산자를 결합합니다. ^^ obj에 해당합니다 < < < obj2. 복제 운영자는 프로토 타입 복제본을 만들고 프로토 타입은 JSON에서 직렬화되지 않음을 기억하십시오. do 사용

+0

작동하지 않습니다. 나는 이것을 전에 시도했지만, 이제는 무언가의 반환 가치를 잘못 평가 한 livescript.net의 통역사 때문에 잘못된 결과를 얻었음을 알게되었습니다. 무슨 뜻인지 확인하려면이 코드를 livescript.net http://jsbin.com/hibahafoga/1/edit?js,console,output –

+0

에 붙여 넣으십시오. livescript.net의 출력이 JSON에 직렬화되기 때문입니다. "복제 운영자는 프로토 타입 복제본을 만들고 프로토 타입은 JSON에 직렬화되지 않습니다." 이것을 시도하십시오 : http://jsbin.com/gejakucoyu/2/edit?js,console,output – blvz

+0

, 그것을 지우고 고맙습니다. –

0

다른 방법 :

# new object can overwrite old-obj 
do-something do 
    old-obj <<< 
    new-prop: \value 
    another: \content 


# old-obj can overwrite new object 
do-something do 
    do 
    new-prop: \value 
    another: \content 
    <<< old-obj 
관련 문제