【问题标题】:Javascript function is executed before it is calledJavascript函数在调用之前执行
【发布时间】:2016-12-01 05:49:44
【问题描述】:

我有一个 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);

当我保存并运行 Meteor 时,它没有启动并且我收到以下错误消息:

TypeError: self.unset is not a function

我觉得我缺少关于如何调用或执行 javascript 函数的一些内容,有人可以指出为什么会发生这种情况吗?

【问题讨论】:

  • 那里不足以重现您遇到的任何问题。你应该看看stackoverflow.com/help/how-to-askminimal reproducible example
  • 弄清楚this 是什么时候执行此代码autoValue: foo(false,this); - 哦,并意识到 foo 在调用new SimpleSchema 之前执行(这也是无效的javascript,看起来像@987654330 @ 在foo(false, this); 的末尾根本不应该存在
  • this 不是您要查找的 this
  • 确实是this 的上下文问题,谢谢!

标签: javascript function meteor simple-schema meteor-collection2


【解决方案1】:

试试这个:

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);

【讨论】:

  • 成功了,谢谢!我会尽快接受答案,至少需要 7 分钟才能完成
猜你喜欢
  • 1970-01-01
  • 2018-09-23
  • 1970-01-01
  • 1970-01-01
  • 2022-11-15
  • 1970-01-01
  • 2018-05-07
  • 2018-01-27
  • 1970-01-01
相关资源
最近更新 更多