我需要为每个登录的用户调用几次函数,但是当函数放在meteor方法中时,this.userId在函数范围内变为未定义,这里是例子:
myMethod: function(){
console.log(this.userId); // this returns proper userId
function innerFunction(){
console.log(this.userId); // this returns undefined
};
innerFunction();
}
如何在函数中传递this.userId? 函数是否必须与Meteor.bindEnvironment绑定?
答案 0 :(得分:2)
您有一些变体可以解决此问题:
使用.bind()
方法:
myMethod: function () {
console.log(this.userId); // this returns proper userId
function innerFunction() {
console.log(this.userId); // this returns undefined
}
innerFunction.bind(this);
}
使用.apply()
方法将正确的this
应用到函数中:
myMethod: function () {
console.log(this.userId); // this returns proper userId
function innerFunction() {
console.log(this.userId); // this returns undefined
};
innerFunction.apply(this);
}
您也可以使用that
this
innerFunction
的{{1}}来将范围传递到myMethod: function () {
var that = this;
console.log(this.userId); // this returns proper userId
function innerFunction() {
console.log(that.userId); // this returns undefined
}
innerFunction();
}
:
innerFunction
或者只是将userId传递给myMethod: function () {
var userId = this.userId;
console.log(this.userId); // this returns proper userId
function innerFunction(userId) {
console.log(userId); // this returns undefined
}
innerFunction();
}
make re
答案 1 :(得分:1)
有几种方法可以做到:
myMethod: function () {
var me = this;
function innerFunction () {
console.log(me.userId);
};
innerFunction();
}
或
myMethod: function () {
var innerFunction = function () {
console.log(this.userId);
}.bind(this);
innerFunction();
}
答案 2 :(得分:0)
你试过绑定这个函数吗?
myMethod: function(){
console.log(this.userId); // this returns proper userId
function innerFunction(){
console.log(this.userId); // this returns undefined
}.bind(this);
innerFunction();
}