Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как граматно создать конструктор (https://javascript.ru/forum/misc/52088-kak-gramatno-sozdat-konstruktor.html)

kostyanet 03.12.2014 18:28

крутой, вы в прошлой моей теме все засрали, я бы хотел вас попросить не вмешиваться, а то я вас могу травмировать, у меня еще с юзенета могучий опыт имеется.

Там я задавал именно такой вопрос, про эту самую память. Не скажу что она меня сильно волнует, ибо и без скриптов FF хавает изрядно, подумаешь еще пару мегов, а Chrome вообще может полтора гига засосать своим leakage. Но тем не менее, вот усеченный код, структура вся сохранена

var FormField=function(elem){
	var	type=		elem.type,
		def=		elem.value,
		rules={};

	return {
		validate:function() {
			value=elem.value.trim();
			if(type in rules)
				rules[type]();
			else
				rules.text();
		}
	};
};

// load

var some[]=FormField[elem];


Я понимаю у каждого будет своя копия (инстансь) объекта который возвращает функция, а все ее кишки тоже скопируются?

tsigel 03.12.2014 18:28

Цитата:

Сообщение от danik.js
Как? Чтобы у методов был к ним доступ.

danik.js,
Например так:

var Class = (function () {

   var private
   var Class = function () {}

   Class.prototype.someMethod = function() {
      private ...
   };

   ...

   return Class;
})();

krutoy 03.12.2014 18:30

Цитата:

Сообщение от danik.js
Как? Чтобы у методов был к ним доступ.

Методы могут быть определны в том ж замыкании, вариантов тьма.

tsigel 03.12.2014 18:32

Цитата:

Сообщение от kostyanet
Я понимаю у каждого будет своя копия (инстансь) объекта который возвращает функция, а все ее кишки тоже скопируются?

Да

krutoy 03.12.2014 18:32

kostyanet,
Да ты долбоеб, по ходу, совсем мягкий, блять. Нахуй ты мне сдался.

kostyanet 03.12.2014 18:33

tsigel,

Спасибо еще раз. Но выглядит страшновато. Надо привыкнуть, подольше смотреть, не отворачиваться. :)

krutoy 03.12.2014 18:36

Цитата:

Сообщение от nerv_
потому, что может пригодиться function.name (имя класса)

а можно пример, когда это может пригодится?

Siend 03.12.2014 18:38

Развели тут срач в моей теме... ><

Вообщем, кажется, я наконец-то понял, поправьте меня, если я туплю.

1. Я создаю конструктор, который должен проинициализировать все мои переменные используемые в данном canvas. Т.е. допустим я использую:
...
var x0Multi
    var y0Multi
    var x1Multi
    var y1Multi
    var xMouse
    var yMouse
    var TEMP = ""
    var ActionState = "single"
    var Creating = "none"
    var InFocus = { H: [], S: [], CvC: [] }
    var DATA = []
    var conn = []
    var vers = []
    var edges = []
    var cnEdg = 0
    var cnCon = 0
    var cnVer = 0
    var idV = 0
    var idE = 0

...
тогда я получу что-то вроде:
var SomeConstructor = function() {
    this.x0Multi
    this.y0Multi
    this.x1Multi
    this.y1Multi
    this.xMouse
    this.yMouse
    this.TEMP = ""
    this.ActionState = "single"
    this.Creating = "none"
    this.InFocus = { H: [], S: [], CvC: [] }
    this.DATA = []
    this.conn = []
    this.vers = []
    this.edges = []
    this.cnEdg = 0
    this.cnCon = 0
    this.cnVer = 0
    this.idV = 0
    this.idE = 0
};


2. Все функции я должен переписать в ввиде расширения прототипа. Т.е.:

было
...
    function drawMultiSelect() {
        ctx.beginPath();
        ctx.rect(x0Multi, y0Multi, x1Multi - x0Multi, y1Multi - y0Multi);
        console.log(x0Multi + " " + y0Multi + " " + xMouse + " " + yMouse)
        ctx.strokeStyle = "rgba(0,0,255,0.5)";
        ctx.fillStyle = "rgba(0,0,255,0.3)";
        ctx.fill();
        ctx.stroke();
    }
...


стало:
SomeConstructor.prototype.drawMultiSelect() {
        this.ctx.beginPath();
        this.ctx.rect(x0Multi, y0Multi, x1Multi - x0Multi, y1Multi - y0Multi);
        this.ctx.strokeStyle = "rgba(0,0,255,0.5)";
        this.ctx.fillStyle = "rgba(0,0,255,0.3)";
        this.ctx.fill();
        this.ctx.stroke();
    }


остается мне только одно не понятным.
допустим я в конструкторе я определил переменную this.ctx, как потом мне обратиться к ней из функции определенной в прототипе? как к ctx или как к this.ctx?

tsigel 03.12.2014 18:39

Цитата:

Сообщение от krutoy
а можно пример, когда это может пригодится?

krutoy,
Я делал систему логирования, которая в случае ошибки отправляла на сервер ошибку, имя метода и класса (со всей цепочкой наследования) в котором произошла ошибка.

krutoy 03.12.2014 18:49

Цитата:

Сообщение от Siend
как к ctx или как к this.ctx?

Как this, естественно. Но Вы по-прежнему не понимаете, как это работает, иначе этого вопроса бы не возникло просто.


Часовой пояс GMT +3, время: 23:40.