2016-12-01 113 views
1

我有一個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://stackoverflow.com/help/how-to-ask和[MCVE] – pvg

+0

找出當執行這個代碼時'this'是什麼'autoValue:foo(false,this);' - 哦,並認識到foo是在調用'new SimpleSchema'之前執行的(也就是說,這不是有效的javascript,看起來像''foo(false,this)'末尾的';'應該不存在 –

+0

'this'不是你要找的這個'這個' – godfrzero

回答

2

試試這個:

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

相關問題