| 
 как правильно обращаться к свойствам объект внутри самого объекта ? вот пытаюсь написать такой класс (оставил только суть) 
function Test(param1, param2, param3) {
	this.param1 = param1
	this.param2 = param2
	this.param3 = param3 || 4
	this.fn1 = function (callback) {
		как тут правильно получить param1,param2,param3 
		при том что бы не возникало проблем при вызове из fn2 и просто test.fn1() ?
	}
	this.fn2 = function (callback) {
		
		как тут правильно получить param1,param2,param3 ?
		
		как тут правильно вызывать fn1 ?
		
	}
}
я честно запутался в это this вообще :-/ | 
| 
 
function Test(param1, param2, param3) {
	this.param1 = param1
	this.param2 = param2
	this.param3 = param3 || 4
	this.fn1 = function() {
           console.log(this.param1 + this.param2 + this.param3);
	}
	this.fn2 = function() {
	   console.log(this.param1 * this.param2 * this.param3);
           this.fn1();
	}
}
var a = new Test(1, 2, 3);
a.fn2();
 | 
| 
 так то работает да. А вот так нет. 
function Test2() {
	this.testnf1 = function (x, callback){
		callback(x)
	}
}
function Test(param1, param2, param3, obj) {
	this.param1 = param1
	this.param2 = param2
	this.param3 = param3 || 4
	this.obj = obj
	
	this.fn1 = function() {
           this.obj.testnf1(this.param3, function(data){
				this.fn2(data)
		   });
	}
	this.fn2 = function(x) {
	   console.log(x);
	}	
}
var test2 = new Test2();
var a = new Test(2, 3, 4, test2);
a.fn1();
Как в колбэк тогда передать правильно this.fn2 ? получить бы где-то сразу при вызове a.fn1() ссылку на объект , а потмо ее вместо this использовать. | 
| 
 this динамичен. Прочитай про метод .bind(), он тебе должен помочь. | 
| 
 дак там все-равно надо передать контекст, а как мне получить этот контекст внутри объекта? context = this не работает, ибо это создает просто ссылку на this | 
| 
 кажется разобрался, нужно передать контекст в колбэк, с помощью dind (function(data){this.fn2(data)}).bind(this) 
function Test2() {
	this.testnf1 = function (x, callback){
		callback(x)
	}
}
function Test(param1, param2, param3, obj) {
	this.param1 = param1
	this.param2 = param2
	this.param3 = param3 || 4
	this.obj = obj
	
	this.fn1 = function() {
           this.obj.testnf1(this.param3, (function(data){
				this.fn2(data)
		   }).bind(this));
	}
	this.fn2 = function(x) {
	   console.log(x);
	}	
}
var test2 = new Test2();
var a = new Test(2, 3, 4, test2);
a.fn1();
 | 
| 
 Ты неправильно делаешь методы. При таком подходе будет создаваться свой собственный экземпляр метода каждому инстансу класса. Используй прототип, и путаницы меньше станет. 
function Character(hp) {
    this.hp = hp;
}
Character.prototype.hit = function(amount) {
    this.hp -= amount;
}
Character.prototype.heal = function(amount) {
    this.hp += amount;
}
let character = new Character(1000);
console.log(character.hp); //1000
character.hit(400);
console.log(character.hp); // 600
character.heal(300);
console.log(character.hp); // 900
 | 
| 
 Ну и, когда разберешься с механикой - не оставайся на этом, переходи на классы ES6. 
class Character {
    constructor(hp) {
        this.hp = hp;
    }
    
    hit(amount) {
       this.hp -= amount;
    }
    heal(amount) {
        this.hp += amount;
    }
}
Практически от вышеописанного они не отличаются ничем, просто синтаксический сахар. Пока что, пока все браузеры не реализовали, работает через трансляцию. | 
| 
 Цитата: 
 
function Test(param1, param2, param3) {
    this.param1 = param1
    this.param2 = param2
    this.param3 = param3 || 4
 
    this.fn1 = function (callback) {
       with(this) callback(param1, param2, param3)
    }
 
    this.fn2 = function (callback) {
       with(this) callback(param1, param2, param3)
    }
}
test=new Test(1,2,3)
test.fn1(function(x,y,z){alert(x+y*z)}) //  7
test.fn2(function(x,y,z){alert(x+y*z)}) //  7
 | 
| 
 Цитата: 
 | 
| Часовой пояс GMT +3, время: 02:31. |