2011-08-13 2 views
0

매개 변수로 객체 선언이 작동하지 않습니까?

create(a, b, c){a에 대한 연결은 다음과 같습니다.

그래서 본질적으로 내가 전에 일한 것보다 더 효율적일 것이기 때문에 for 루프를 사용하여 객체를 선언하려고합니다 :

this.logo = create("img", {position: "absolute"}, {src: "img/coffee.png"}); 
this.door = create("img", {position: "absolute"}, {src: "img/door.png"}); 

... etc

(create(a, b, c){ 사용자 정의 함수입니다, 위의 코드를 잘 알고 있습니다.)

이것이 작동하지 않는 이유는 무엇입니까? 개체가 매개 변수로 입력되면 개체가 중지됩니까?

+0

'this'가 범위를 잃어 버릴 수 있습니까? –

+0

나는'var me = this;'와'me.logo' 등을 사용하여 모든 것을 시도해 보았는데 도움이되지 않았다. –

답변

1

, 그것 중 하나를 반환하는 데 사용하거나 값을 설정할 수 있습니다 . 포인터로 사용할 수 없습니다. 이 경우 : 그런 식으로 <object>["name"] = #value 및 할당 :

var o = {} 
function setToFoo(v){ v = "foo" } 
setToFoo(o.foo); 
console.log(o.foo); // undefined 

당신이 다음 배열 구문을 사용한다, 동적으로 뭔가를 지정하려면

var a = [["logo", "img/coffee.png"], ["door", "img/door.png"]] 
for (var i = 0; i < a.length; i++){ 
    this[a[i][0]] = create("img", {position: "absolute"}, {src: a[i][1]}); 
} 

나는 당신의 방법 같은 것을 구축한다면, 그러나 , 나는 실제로 동적 객체에서 key => value 매핑을 사용하여보다 명확하게 만듭니다.

object.addimgs = function(obj, src){ 
    for (var it in src){ 
     obj[it] = create("img", {position: "absolute"}, {src: src[it]}); 
    } 
} 

var src = {logo: "img/coffee.png", door: "img/door.png"} 
var obj = // whatever your "this" is 
object.addimgs(src, obj); 
+0

흠, 저는 객체 스타일과 다른 모든 속성을 설정하기 위해 제 'create()'함수에서 key => value map을 사용합니다. 그것은 공정한 점입니다. 그러나'on '이 아닌'src in var'를 의미 했습니까? –

+0

@Artur 아 ... 오타 ... – cwallenpoole

+0

그래도 고마워. –

2

내가 시도한 것을보고 있지만 a[i][0]에 할당하면 배열 슬롯에 포함 된 것이 아니라 배열 슬롯에 할당됩니다. 이 같은 배열을 만들 때

또한 :

[[this.logo, "img/coffee.png"], [this.door, "img/door.png"]] 

배열 요소가 [0][0]this.logo 부재에 참조 아니다 당신이 기대 같네요있다. 배열 요소 [0][0]에는 배열을 만들 때의 this.logo 값이 들어 있으며, 대부분 undefined이됩니다. 대신이 같은

시도 뭔가 :

object.addimgs = function(a){ 
    for (var i = 0; i < a.length; i++){ 
     a[i][0][a[i][1]] = create("img", {position: "absolute"}, {src: a[i][2]}); 
    } 
} 
다음

이 배열로 전화 : 자바 스크립트의 <object>.<property>있을 때마다

[[this, "logo", "img/coffee.png"], [this, "door", "img/door.png"]] 
+0

아 맞다! 나는 참조/가치에 대해 알지 못했다. 나는 이것을 가지고 일하게했다 : 'this [a [i] [0]] = create ...'나를 계몽 해 주셔서 감사합니다. –

+0

문제 없습니다. 설명 할 또 다른 방법은'var x = this.logo;와 같은 이유 때문에 코드가 작동하지 않는다는 것입니다. x = 42;는'this.logo'에 42를 지정하지 않습니다. – cdhowie

관련 문제