что у вас там есть конструктор.Это особая функция, которая делает JavaScript более читабельным для тех, кто работает на C и Java.
Как это особенное, спросите вы?
Ну, во-первых, это просто по той причине, которую вы упомянули, не возвращая объект, с которым вы играете.Если вы ничего не возвращаете, возвращается значение this
пустого объекта.Обычно в функции this
относится к window
или другим вещам, основанным на ситуации, например, o.method
this
относится к o
в нормальных ситуациях.В вашем случае это конструктор, и вы назвали его новым, поэтому 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, я никогда не использую конструкторы, но это хороший способ намочить ноги.