哦,孩子,你把很多事情弄糊涂了。
函数CarConstructor(){this.speed=19;//单位:mphthis.make=“福特”;this.fillKph;//<->这句话毫无意义。//当您在没有任何赋值的情况下编写this.fillKph时,它将“未定义”。//因为你在其他地方有一个名为“fillKph”的函数,//这并不意味着它会被附加到这个属性上。}
尝试,
var丰田=新车();警戒(丰田型fillKph)//将发出未定义的警报。
fillKph函数是在全局范围内创建的,即作为“Window”对象的属性。
函数fillKph(){var me=这个;$(“#kphdiv”).html(me.speed*1.61);}
要解决这个问题,你可以按照rezzif的建议。您的最终代码将如下所示
函数Car(){this.speed=19;//单位:mphthis.make=“福特”;this.fillKph=函数(){$(“#kphdiv”).html(this.speed*1.61);};}car1=新Car();car1.填充Kph();
如果您注意到了,我并没有将对“this”的引用存储在局部变量中。为什么?此场景中没有必要。要了解更多信息,请参阅我在这里的详细答案.
如果要创建大量Car对象,可以在原型上定义fillKph方法。
函数Car(){this.speed=19;//单位:mphthis.make=“福特”;}Car.prototype.fillKph=函数fillKph(){$(“#kphdiv”).html(this.speed*1.61);};car1=新Car();car1.填充Kph();
编辑:
如果你做这样的事,
函数CarConstructor(){this.speed=19;//单位:mphthis.make=“福特”;this.fillKph=填充Kph;}函数fillKph(){$(“#kphdiv”).html(me.speed*1.61);}car1=新Car();car1.填充Kph()//这将如预期那样发挥作用。
但问题是fillKph是在“Window”范围内定义的,所以我可以直接这样调用它,
fillKph()//这样称呼它会破坏它,因为它不会得到正确的“this”。
重点是,
警报(填充类型Kph);//如果您按自己的方式操作,则会发出警报“功能”,警报(填充类型Kph);//警告“未定义”,如果你按照我建议的方式做,我认为这是首选。