2011-04-06 4 views
1

나는 연산자를 사용하여 원시 객체를 확장하려고 시도했다. 그것은 작동합니다. 생각할 수있는 부작용이 있습니까?+/- 등으로 오브젝트를 확장 할 수 있습니까?

Number.prototype['+++'] = function(n){ 
    return this + (2*n); 
}; 

String.prototype['+'] = function(){ 
    return this += [].slice.call(arguments).join(''); 
} 

alert(10['+++'](10)); //=> 30 
alert('hello '['+']('world ','and ','see you later!')); 
     //=> hello world and see you later! 

내가 그 아무것도 영향을 볼 수 없습니다 또한 this jsfiddle

+1

부정적인 영향은 생각할 수 없지만 실제로는 코드 작성/읽기가 쉬워 진다고 스스로에게 묻습니다. 나는 그것이 당신의 경우에 정반대의 것이라고 주장 할 것입니다. – Alex

답변

2

당신이하고있는 것에 어떤 부작용도 있어서는 안됩니다. 실제로 "연산자 오버로딩"을 호출하지 않거나 코드 사용자가 실제로 연산자를 사용할 수 있다고 생각할 수 있습니다. "정말로이 코드를 작성하는 것이 더 쉬워 집니까?"라고 스스로에게 묻고 싶을 수도 있습니다.

+0

이것은 연산자 오버로딩을 염두에두고 실험을 시작했습니다. 지금 바이올린 제목을 변경했습니다. 게다가, 그것은 단지 재미를위한 것이지만, 장래에 어떤 용도로 사용될 것인지 결코 알 수 없습니다. 우리 나라에서는'[ '% +']'는 VAT 포함 금액을 계산하는 데 사용될 수 있습니다. 예를 들면 다음과 같습니다. 반면에 : 'Number.prototype.VAT' 또는 그와 비슷한 것을 할 수 있습니다. – KooiInc

1

참조하십시오. 유일한 방법은 오타가 될 것이라고 생각합니다. 개발자가 이전에 그런 연산자가 없다는 것을 알리기 전에 (필자는 추측하고 있습니다.)하지만 이제는 그렇게 할 것입니다. 비록 내가 경험이 풍부한 자바 스크립트 개발자는 아니지만.

1
alert('hello '['+']('world ','and ','see you later!')); 

예, 이런 일을하는 데 부작용이 있습니다. 코드를 읽을 수 없게 만듭니다. 이 계획을 세웠을 때 너 무슨 담배 피 웠니?

또한 사용자가 수행하는 작업은 운영자와 관련이 없습니다. 당신은 단지 이름이 "+"또는 "+++"인 객체 프로퍼티를 생성하는 것입니다. "+"문자는 통역사가 운영자로 간주하는 경우에만 운영자입니다. 문자열 리터럴 내부에 있으면 다른 문자 일뿐입니다.

+0

사실 저는 9 주 전에 금연했습니다. 그게 틀림 없어! ; D – KooiInc

+0

어쨌든, 네, 그건 진정한 부작용입니다. 그리고 네, 운영자가 아니에요, 저도 알고 있어요. 그래서 우리는'Number.prototype. +++'연산자를 사용하지 못하게합니다. – KooiInc

+0

음,이 btw는 무엇을 만드나요? http://www.indiscripts.com/post/2010/05/operator-overloading-with-extendscript – KooiInc

관련 문제