全局对象内javascript参数中的奇怪行为
全局Javascript对象内的参数中有一个奇怪的行为: 我需要用jasmine.js测试我的代码,但是我无法将期望值传递给jasmine测试中始终返回未定义的参数全局对象内javascript参数中的奇怪行为,javascript,jasmine,Javascript,Jasmine,全局Javascript对象内的参数中有一个奇怪的行为: 我需要用jasmine.js测试我的代码,但是我无法将期望值传递给jasmine测试中始终返回未定义的参数 //My model myGlobalObject = function(){ _myCart = function(){ return { total : 0, products : [] } } return { init: function
//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的意图,但下面是我对这个问题的看法
可以是一个局部变量,因为它似乎没有任何更大的用途,至少与OP提供的代码不同\u myCart
- 调用
可以使用空括号,也可以使用合法变量,这取决于OP在这里试图实现什么instance.init
- 我包括了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)
时,您正在调用一个函数变量初始状态