I have read this answer and IIFE but I can't seem to find the correct solution to my problem.
I have a simple class here:
define(['jquery'], function($) { // Need 'self' because someCallback() is being called with .call() and 'this' changes var self; function Foo(number) { self = this; this.someNumber = number; } Foo.prototype = { someCallback: function () { //Use self because 'this' changes to a DOM element var num = self.someNumber; //Do something with the num return num * 2; } }; return Foo; }); and someCallBack() is being called by a jQuery plugin using .call(). Because of this, the context changed, hence the use of the self variable.
However, this is wrong because:
define(['foo'], function(Foo) { describe('context question', function () { var foo1 = new Foo(1); var foo2 = new Foo(2); it('"this" should work', function () { var call1 = foo1.someCallback.call(this); // 4 var call2 = foo2.someCallback.call(this); // 4 expect(call2).toBe(4); // Only works because it is 'new' last expect(call1).toBe(2); // Fails because 'self' is taken from foo2 }); }); }); How exactly should I wrap the self variable to make this code work?