개체 속성은 단순 속성 또는 함수 일 수 있습니다. CoffeeScript에서이 속성의 value
을 얻는 쉬운 방법이 있습니까?함수 또는 속성 getter를 호출하는 CoffeeScript 관용구
value = if typeof obj.property is "function" then obj.property() else obj.property
개체 속성은 단순 속성 또는 함수 일 수 있습니다. CoffeeScript에서이 속성의 value
을 얻는 쉬운 방법이 있습니까?함수 또는 속성 getter를 호출하는 CoffeeScript 관용구
value = if typeof obj.property is "function" then obj.property() else obj.property
가 관용적 인 경우 나도 몰라하지만 당신은 사용할 수 있습니다 (학대?)이 목적을 위해 existential operator.
이typeof obj.p === "function" ? obj.p() : void 0
p
함수 인 경우 그래서,이 호출 될 것이다, 그렇지 않으면 당신은 undefined
을 얻을 :
obj.p?()
# ---^
커피 스크립트가 그 변환합니다 :
당신은 이런 말을합니다.obj.p?()
가 정의되지 않은 경우 다음 당신은
obj.p
다시 가을에 또 다른 존재 운영자에 던져 수 있습니다
이
obj =
u: -> undefined
다음 obj.u?() ? obj.u
당신에게 줄 것이다 : 당신이있는 경우
obj.p?() ? obj.p
는하지만이에 전체가 함수가 반환하는 undefined
보다는 전체 함수 백입니다. 당신이 그 가능성에 직면해야하는 경우 나는 당신이 당신의 자신의 함수를 작성 붙어 있다고 생각 :
prop = (x) ->
# Argument handling and preserving `@` is left as an exercise
if typeof x == 'function'
x()
else
x
하고 x = prop obj.maybe_function_maybe_not
말.
데모 : http://jsfiddle.net/ambiguous/hyv6pdtc/
당신이 주변에 밑줄을 가지고 있다면, 당신이 result
기능입니다 사용할 수 있습니다 명명 된 재산의 값이면
결과
_.result(object, property)
그런 다음 함수는 오브젝트 컨텍스트로 호출합니다. 그렇지 않으면 반환하십시오.
감사합니다. 나는 밑줄을 사용하지 않고 WinJS를 사용하고있다. 나는이 기능을 쉽게 거기에 주입 할 수있다. 아이스 CS가이 상자를 지원하는지 궁금합니다. – philk
당신이 이것을 원한다면 CoffeeScript를 그렇지 않은 것으로 만들기 위해 노력하고 있다고 생각합니다. 'if' 문에서 객체 메서드의 모든 단일 액세스를 래핑하고 싶습니까? 속성에 액세스하는지 또는 메소드를 호출하는지 여부를 알아야합니다. – meagar
일반적인 패턴입니다. 명명 된 속성은 단순한 속성이거나 복잡한 기능 일 수 있습니다. 이 질문에 대한 이유는 정확하게이 끔찍한 코드에서 이러한 모든 과제를 래핑하지 못하게하기 위해서입니다. – philk
다른 언어 *의 일반적인 패턴입니다. – meagar