2011-09-09 10 views
1

자바 스크립트 함수의 범위 질문

function createCar(sColor, iDoors, iMpg) { 
    var oTempCar = new Object; 
    oTempCar.color = sColor; 
    oTempCar.doors = iDoors; 
    oTempCar.mpg = iMpg; 
    oTempCar.showColor = function() { 
     alert(this.color) 
    }; 
    return oTempCar; 
} 
var oCar1 = createCar("red", 4, 23); 
var oCar2 = createCar("blue", 3, 25); 
oCar1.showColor(); //outputs “red” 
oCar2.showColor(); //outputs “blue” 

내 질문에 다음 코드를 참조하십시오는 뭐죠 위의 함수에서 반환의 주요 사용? 함수에 의해 생성 된 객체를 반환하고 모든 속성을 oCar1 및 oCar2 [이 예제에서는] coz에 반환하지 않고 반환하려면이 함수가 실패합니다.

+1

질문에 답변했습니다. 너 아직도 알고 싶은 다른 것이 있니? –

+1

예, 당신은 항상 허리 밖으로 코드를 들여 쓰기해야합니다. –

답변

0

생성 된 새 개체를 반환하는 것입니다 (oTempCar).

return이 없으면 undefinedoCar1oCar2으로 암시 적으로 할당됩니다.

0

여기에 정확하게 들여 쓰기 된 코드가 있습니다.

보시다시피, returncreateCar 기능의 일부입니다. 반환하지 않으면 undefined을 반환하므로 oCar1oCar2이 올바르게 설정되지 않으며 showColor() 메서드가 변수에 존재하지 않습니다.

범위를 결정하는 것은 괄호 {}입니다. return은 괄호 {}의 범위에 속하며이 경우에는 creatCar 범위/괄호 안에 있습니다.

function createCar(sColor, iDoors, iMpg) { 
    var oTempCar = new Object; 
    oTempCar.color = sColor; 
    oTempCar.doors = iDoors; 
    oTempCar.mpg = iMpg; 
    oTempCar.showColor = function() { 
     alert(this.color) 
    }; 
    return oTempCar; 
} 
var oCar1 = createCar("red", 4, 23); 
var oCar2 = createCar("blue", 3, 25); 
oCar1.showColor(); //outputs “red” 
oCar2.showColor(); //outputs “blue” 
0
function createCar(sColor, iDoors, iMpg) { 
    this.color = sColor; 
    this.doors = iDoors; 
    this.mpg = iMpg; 
    this.showColor = function() { 
     alert(this.color) 
    }; 
} 
var oCar1 = new createCar("red", 4, 23); 
var oCar2 = new createCar("blue", 3, 25); 
oCar1.showColor(); //outputs “red” 
oCar2.showColor(); //outputs “blue” 

이 this.you와 동일 는 "새"를해야합니다.

0

거기에 생성자가 있습니다. C 및 Java 사람들에게 JavaScript를 더 읽기 쉽게 만들어주는 특별한 종류의 함수입니다.

어떻게 특별한가요?
글쎄, 하나의 이유는 당신이 놀고있는 물건을 돌려주지 않고 언급 한 이유 때문입니다. 반환 값이없는 경우 this 값을 빈 객체로 반환합니다. 일반적으로 thiswindow 또는 o.methodthis과 같은 상황을 기준으로 일반적인 상황에서는 o을 나타냅니다. 귀하의 경우 이것은 생성자이며 new로 호출 했으므로, 으로 프로토 타입을 설정하고 createCar.prototype.constructor을 가리키는 prototype.constructor로 설정된 새로운 빈 객체를 참조하십시오.이 경우 createCar입니다. 위의 답변에서 지적했듯이이 값을 수정하면 예상대로 작동하는 작업을 얻을 수 있습니다.

이러한 답변은 여전히 ​​C 코드와 유사하므로 어떻게 재미있는 JavaScript 코드를 만들 수 있습니까? 이것을 시도하십시오 :

function createCar(sColor, iDoors, iMpg) { 

    this.color = sColor; 
    this.doors = iDoors; 
    this.mpg = iMpg; 
    //return this; //Not needed, but is what happens under the covers 
} 

createCar.prototype = { 

    showColor: function(){ 

     alert(this.color); 
    } 
} 

var oCar1 = createCar("red", 4, 23); 
var oCar2 = createCar("blue", 3, 25); 
oCar1.showColor(); //alerts “red” 
oCar2.showColor(); //alerts “blue” 

다시 지루해! 좀 더 재미있게 할 수 있습니다.

createCar.prototype.showColor.call(oCar1); //Alerts "red" 
createCar.prototype.showColor.call(new createCar("red")); //Also alerts red 

TBH, 나는 결코 생성자를 사용하지 않지만 발을 축축하게하는 좋은 방법입니다.