JavaScript函数范围问题

时间:2011-09-09 05:02:06

标签: javascript return

请参阅以下代码

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而不返回此函数失败。

4 个答案:

答案 0 :(得分:0)

返回创建的新对象(oTempCar)。

如果没有returnundefined将被隐式分配给oCar1oCar2

答案 1 :(得分: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”

答案 2 :(得分: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”

它与此相同。你需要一个“新”。

答案 3 :(得分:0)

你有什么构造函数。这是一种特殊的功能,可以让那些C和Java人员更容易阅读JavaScript。

你问的有多特别?
好吧,这只是因为你提到的原因没有返回你正在玩的对象。如果不返回任何内容,则返回this个空对象的值。通常在函数this中引用window或基于o.method this等情况的其他内容在正常情况下会引用o。在您的情况下,这是一个构造函数,您使用new调用它,因此this引用一个新的空对象,其原型设置为createCar.prototype,prototype.constructor指向createCar.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,我从不使用构造函数,但这是让你的脚湿润的好方法。