Javascript函数在被调用之前执行

问题描述:

我有一个javascript函数,抱怨它的正文中的调用在调用之前不是函数。有人能帮我解释一下吗?Javascript函数在被调用之前执行

上下文:我正在使用MeteorCollection2,我想使用一个函数在我的模式的不同属性上重用。准确地说,我想做到以下几点:

function foo (autoVal, self){ 
    if(something){ 
    return autoVal; 
    }else{ 
    return self.unset(); 
    } 
} 

export const myCollection = new Mongo.Collection('myCollection'); 

const Schema = new SimpleSchema({ 
    my_field:{ 
     type:Boolean, 
     autoValue: foo(false,this), 
    } 
}); 

myCollection.attachSchema(Schema); 

当我保存这个和运行流星,没有启动,并且我收到以下错误消息:

TypeError: self.unset is not a function

我觉得我我错过了如何调用或执行JavaScript函数,有人能指出为什么会发生这种情况吗?

+0

没有足够的有重现您有任何问题。你应该检查出http://*.com/help/how-to-ask和[MCVE] – pvg

+0

找出当执行这个代码时'this'是什么'autoValue:foo(false,this);' - 哦,并认识到foo是在调用'new SimpleSchema'之前执行的(也就是说,这不是有效的javascript,看起来像''foo(false,this)'末尾的';'应该不存在 –

+0

'this'不是你要找的这个'这个' – godfrzero

试试这个:

function foo (autoVal, self){ 
    if(something){ 
    return autoVal; 
    }else{ 
    return self.unset(); 
    } 
} 

export const myCollection = new Mongo.Collection('myCollection'); 

const Schema = new SimpleSchema({ 
    my_field:{ 
     type:Boolean, 
     autoValue() { 
     return foo(false, this); 
     } 
    } 
}); 

myCollection.attachSchema(Schema); 
+0

工作的非常感谢!我会很快接受答案,至少需要7分钟才能做到这一点 – EugVal