2014-01-24 2 views
0

이해함에 따라 eval()은 위험 할 수 있습니다. 그리고 내 JSLint의 모든 경고를 보는 것은 짜증나기도합니다.기본 객체에 eval()을 사용하지 않으려면 어떻게해야합니까?

내 위시리스트/쇼핑 카트와 동일한 많은 기능이 있습니다. 그래서 나는 그것을 역동적으로 만들고 각각의 하나의 기능만을 갖고 싶습니다.

cart.addItem()wish.addItem() 대신에 cartWish.addItem(type)이 필요합니다.

인사이드 cartWish.addItem() 입력 인수에 따라 cart.data 또는 wish.data에 액세스해야합니다.

eval(type).data에 의존하지 않고 어떻게해야합니까?

나는 this[type].data을 시도했지만 올바르게 작동하지 않았습니다.

cart.addItem(...); 
wish.addItem(...) 

cartWish.addItem("cart", ...); 
cartWish.addItem("wish", ...); 

의 차이점은 무엇

+2

'addItem (target)'여기서'target'은'cart' 또는'wish' 일 수 있습니까? – georg

+1

간단하게 지키면 어떨까요? 'if (type === 'wish') {wish.data; } else if (type === 'cart') {cart.data; }':-) –

+2

@ thg435 : 문자열 대신에'cart' 또는'wish' 객체를 전달하는 것을 의미합니까? –

답변

0

그것이 가난한 프로그래밍 :

function addItem(x, data) { 
    x.addItem(data); 
} 

var cart = ... 
var wish = ... 

addItem(cart, {...}); 
addItem(wish, {...}); 

또 다른 옵션은 클래스를 생성하는 것입니다. 나는 자바 스크립트가 사본 대신 객체를 참조하는 경향이 있다는 것을 몰랐다.

이렇게

...

var myReference=(type == "cart") ? cart.data : wish.data; 
myReference[0].name="Bob Dole's Grill"; 

...은 실제로 기능 cart.data [0] 외부 .name을 변경한다. 그리고 카트 객체를 메모리에 복사하지 않고 그렇게 할 것입니다.

참고 : 함수를 참조하여 개체를 전달할 수도 있지만 가능한 경우 잘 모르겠습니다. KnockoutJS 클릭 이벤트에서이 함수를 호출하기도합니다.

1

줄의 코드 같은 번호와 같은 것, 그리고 당신이 한 모든 당신이 정말로 무엇을하고 있는지 당황입니다. 어쩌면 하나 카트 또는 소원 오브젝트를받는 함수를 만들고 그들이 동일한 인터페이스가 가정 내 부분에

function Item(type) { 
    this.type = type; 
} 

Item.prototype.add = function add(...) { 
    // ... 
}; 


var cart = new Item("cart"); 
var wish = new Item("wish"); 

cart.add(...) 
wish.add(...) 
+0

나는 객체의 복사본을 만드는 것을 피하기를 바랬는데, 이것은 가장 좋은 해결책 일 수 있습니다. 함수가 실행을 마자 마자 객체가 파괴되기 때문입니다. – Glyph

+0

방금 ​​함수를 객체에 전달하면 참조로 자동 전달됩니다. 그게 사실이야? 그렇다면 "cart"또는 "wish"라는 문자열 대신 객체를 전달합니다. – Glyph

관련 문제