请参阅以下代码
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而不返回此函数失败。
答案 0 :(得分:0)
返回创建的新对象(oTempCar
)。
如果没有return
,undefined
将被隐式分配给oCar1
和oCar2
。
答案 1 :(得分:0)
这是正确缩进的代码。
如您所见,return
是createCar
函数的一部分。如果没有返回,它将返回undefined
,因此oCar1
和oCar2
将无法正确设置,并且变量上不存在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,我从不使用构造函数,但这是让你的脚湿润的好方法。