全局对象内javascript参数中的奇怪行为

全局对象内javascript参数中的奇怪行为,javascript,jasmine,Javascript,Jasmine,全局Javascript对象内的参数中有一个奇怪的行为: 我需要用jasmine.js测试我的代码,但是我无法将期望值传递给jasmine测试中始终返回未定义的参数 //My model myGlobalObject = function(){ _myCart = function(){ return { total : 0, products : [] } } return { init: function

全局Javascript对象内的参数中有一个奇怪的行为: 我需要用jasmine.js测试我的代码,但是我无法将期望值传递给jasmine测试中始终返回未定义的参数

//My model
myGlobalObject = function(){
  _myCart = function(){
      return {
        total : 0,
        products : []
       }
   }

   return {
      init: function(strangeArgument){
        console.log(strangeArgument) //this return undefined in jasmine test
       },

     myCart : _myCart,

     addProduct : function(Products){
       return _myCart()
     },

    .....
   }

}
测试:

const c{
   empty : {
      total: {
        beforeVAT: 0,
        afterVAT: 0,
        VAT: 0
      },
     products: []
  }
}

beforeEach(() => {
    this.instance = myGlobalObject();
    this.instance.init();
    this.productWithoutQuantity = Object.assign({}, _.productA);
    delete this.productWithoutQuantity.quantity;
    this.productWithQuantity = Object.assign({}, _.productB);
  });

test(`the cart should be empty`, () => {
    expect(this.instance.getCart()).toEqual(c.empty);
  });

.... more tests
我的主要工作是:

var e = myGlobalObject();
var initialState = function (){
   return {
      total: {
        beforeVAT: 0,
        afterVAT: 0,
        VAT: 0
      },
     products: []
  }
}
e.init(initialState);

怎么了?

虽然我不能完全理解OP的意图,但下面是我对这个问题的看法

  • \u myCart
    可以是一个局部变量,因为它似乎没有任何更大的用途,至少与OP提供的代码不同

  • 调用
    instance.init
    可以使用空括号,也可以使用合法变量,这取决于OP在这里试图实现什么

  • 我包括了main.js代码段和
    testVariable.instance.init()(简单地说,如果@Bergi注释它是未定义的,那么它是未定义的)

  • 看到它在行动吗

myGlobalObject=function(){
这是。_myCart=function(){
返回{
总数:0,
产品:[]
}
}
返回{
init:函数(奇异参数){
console.log(奇怪的参数)
},
我的购物车:这个,
addProduct:功能(产品){
返回此。\u myCart()
}
}
}
var e=myGlobalObject();
var initialState=函数(){
返回{
总数:{
增值税前:0,
税后增值税:0,
增值税:0
},
产品:[]
}
}
e、 初始状态;
描述('ajax测试套件',函数(){
var testVariable={}
变量c={
空的:{
总数:0,
产品:[]
}
}
beforeach(函数(){
testVariable.instance=myGlobalObject();
testVariable.instance.init(“hello”);
testVariable.instance.init();
});
它('购物车应该是空的',函数(){
expect(testVariable.instance.myCart()).toEqual(c.empty);
});

});虽然我不能完全理解这里OP的意图,但下面是我对这个问题的看法

  • \u myCart
    可以是一个局部变量,因为它似乎没有任何更大的用途,至少与OP提供的代码不同

  • 调用
    instance.init
    可以使用空括号,也可以使用合法变量,这取决于OP在这里试图实现什么

  • 我包括了main.js代码段和
    testVariable.instance.init()(简单地说,如果@Bergi注释它是未定义的,那么它是未定义的)

  • 看到它在行动吗

myGlobalObject=function(){
这是。_myCart=function(){
返回{
总数:0,
产品:[]
}
}
返回{
init:函数(奇异参数){
console.log(奇怪的参数)
},
我的购物车:这个,
addProduct:功能(产品){
返回此。\u myCart()
}
}
}
var e=myGlobalObject();
var initialState=函数(){
返回{
总数:{
增值税前:0,
税后增值税:0,
增值税:0
},
产品:[]
}
}
e、 初始状态;
描述('ajax测试套件',函数(){
var testVariable={}
变量c={
空的:{
总数:0,
产品:[]
}
}
beforeach(函数(){
testVariable.instance=myGlobalObject();
testVariable.instance.init(“hello”);
testVariable.instance.init();
});
它('购物车应该是空的',函数(){
expect(testVariable.instance.myCart()).toEqual(c.empty);
});

});this.instance.init()时,它是未定义的没有参数?呃,不要使用全局对象…尤其不要泄漏myCart的答案,但是,为什么如果我将main.js中的代码放入module.js文件中,参数
奇怪参数
会正常工作?根据main.js,
初始状态
是一个函数变量,当您调用
e.init(初始状态)时
您正在使用函数变量
initialState调用函数
调用
this.instance.init()时,它当然是未定义的没有参数?呃,不要使用全局对象…尤其不要泄漏myCart的答案,但是为什么如果我将main.js中的代码放入module.js文件中,参数
奇怪的参数
工作正常?基于main.js,
初始状态
是一个函数变量,当您调用
e.init(initialState)
时,您正在调用一个函数变量
初始状态