Javascript JS原型&x2500;为什么';未定义';?
我有一个非常简单的代码(): 它按预期输出到控制台1、2、7。但是,第一个警报输出“未定义”,这是出乎意料的。 为什么?Javascript JS原型&x2500;为什么';未定义';?,javascript,runtime,prototype,Javascript,Runtime,Prototype,我有一个非常简单的代码(): 它按预期输出到控制台1、2、7。但是,第一个警报输出“未定义”,这是出乎意料的。 为什么? UPD 特别是对于i.e.古鲁。如果你设置负数,请解释原因。多谢各位 UPD2。我只是没有在第一个Fnc.prototype.fooz中设置return(在重新定义时)。是的,相当幼稚的错误 在第一次警报期间(fa.fooz())Fnc.prototype.fooz没有返回任何内容。因此,默认情况下,函数将返回未定义的,但并非总是如此,但在我们的例子中,它将返回未定义的。
UPD 特别是对于i.e.古鲁。如果你设置负数,请解释原因。多谢各位
UPD2。我只是没有在第一个Fnc.prototype.fooz中设置return(在重新定义时)。是的,相当幼稚的错误 在第一次
警报期间(fa.fooz())
Fnc.prototype.fooz没有返回任何内容。因此,默认情况下,函数将返回未定义的
,但并非总是如此,但在我们的例子中,它将返回未定义的
。后来,Fnc.prototype.fooz
被分配了新函数,它返回i
值。这就是为什么它能带来预期的结果
Fnc.prototype.fooz = function(){
var i=0;
Fnc.prototype.fooz = function(){
++i;
console.log('i: ', i);
return i;
};
Fnc.prototype.fooz(); // This is not retuning anything
};
如果你想得到你想要的结果,只需修改你的代码如下
Fnc.prototype.fooz = function(){
var i=0;
Fnc.prototype.fooz = function(){
++i;
console.log('i: ', i);
return i;
};
return Fnc.prototype.fooz(); // add a return here.
};
语言实验将引导你去探索它。但不要在实时项目中修改同一函数内的原型,因为这会导致不希望的结果。您对Func.prototype.fooz的第一个定义首先重新定义自身,然后返回未定义。你的重新定义返回了一些东西 在没有返回的JavaScript中,大多数函数返回未定义的。使用new调用的函数除外 它按预期输出到控制台1、2、7。但出乎意料的是, 第一个警报输出“未定义”。但为什么 当您在
Fnc.prototype.fooz
内部重新定义Fnc.prototype.fooz
时,它替换了先前的Fnc.prototype.fooz
定义,该定义没有返回任何内容(表示返回未定义的)
请注意,即使重新定义它,函数执行Fnc.prototype.fooz()代码>先完成
例如,如果在函数执行之前添加console.log
function Fnc(){}
Fnc.prototype.fooz = function(){
var i=0;
Fnc.prototype.fooz = function(){
++i;
console.log('i: ', i); //second print when executed first time
return i;
};
console.log(Fnc.prototype.fooz); //this line will be printed first
Fnc.prototype.fooz();
};
下次以后,只打印新定义中的console.log(即console.log('i:',i);
),因为先前的定义已被覆盖
function Fnc(){}
Fnc.prototype.fooz = function(){
var i=0;
Fnc.prototype.fooz = function(){
++i;
console.log('i: ', i); //second print when executed first time
return i;
};
console.log(Fnc.prototype.fooz); //this line will be printed first
Fnc.prototype.fooz();
};