Javascript 为什么构造函数中的this.prop返回未定义
我希望了解下面代码日志返回的内容中的明显差异。我希望它们是等价的,不会返回未定义的Javascript 为什么构造函数中的this.prop返回未定义,javascript,constructor,this,undefined,Javascript,Constructor,This,Undefined,我希望了解下面代码日志返回的内容中的明显差异。我希望它们是等价的,不会返回未定义的。但是,其中一个确实返回未定义的,而另一个则不返回 var floors=[{number:4,desc:`floors数组中的obj`] 功能单元(编号){ 这个数字=数字 this.floor=Number(字符串(this.Number)[0])//此处的this.property引用没有问题 console.log(this.floor)//这里的值为4,为什么不在下一行呢? console.log(fl
。但是,其中一个确实返回未定义的
,而另一个则不返回
var floors=[{number:4,desc:`floors数组中的obj`]
功能单元(编号){
这个数字=数字
this.floor=Number(字符串(this.Number)[0])//此处的this.property引用没有问题
console.log(this.floor)//这里的值为4,为什么不在下一行呢?
console.log(floors.find(function(floor){return floor.number==this.floor})//为什么返回未定义
console.log(floors.find(函数(floor){return floor.number==4}))//但这不是吗?
}
新单元(425)
因为对于正常函数,此
由函数调用方式定义,而不是函数出现的位置。在您的find
回调中,此
与您的find
回调之外的不同
您至少有四种选择:
将第二个参数传递给find
:它定义了回调中的内容:
console.log( floors.find( function ( floor ) {
return floor.number === this.floor;
}, this ) );
// ^^^^
使用函数#bind
创建绑定函数:
console.log( floors.find( function ( floor ) {
return floor.number === this.floor;
}.bind( this ) ) );
// ^^^^^^^^^^^
绑定函数忽略调用它的this
,而使用绑定到它的函数
定义一个变量并将其设置为this
,然后在回调中使用该变量:
var me = this; // The variable
console.log( floors.find( function ( floor ) {
return floor.number === me.floor;
// ^^
} ) );
this
;在您的情况下,您可以使用不带{}
的简明表单:
console.log( floors.find( floor => floor.number === this.floor ) );
或者这是较长的形式:
console.log( floors.find( floor => { return floor.number === this.floor; } ) );