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

Siend 03.12.2014 18:53

Цитата:

Как this, естественно. Но Вы по-прежнему не понимаете, как это работает, иначе этого вопроса бы не возникло просто.
не совсем, я понимать начинаю по мере объяснений и сейчас стал еще на шаг ближе к этому) Все равно всем спасибо, теперь я думаю смогу справится сам. Только один мелкий вопросик, а как мне обратиться к каждому элементу canvas? есть какая-нибудь функция для перебора их?

krutoy 03.12.2014 18:56

Цитата:

Сообщение от Siend
а как мне обратиться к каждому элементу canvas? есть какая-нибудь функция для перебора их?

Цикл?

kostyanet 03.12.2014 18:56

Не получается, набрался наглости попросить показать как из того что было

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];


сделать правильный объект, который бы содержал только данные, а методы держал бы в прототипе.

На php такая задача решается через скажем protected static function(), поскольку статика не создает экземпляров. Ну и там еще легко делаются геттеры с сеттерами всякие. В итоге в объекте может быть ровно 1 array в качестве тех самых данных.

danik.js 03.12.2014 18:57

tsigel, уверен что это правильно будет работать?

var Class = (function () {
 
   var private
   var Class = function () {}
 
   Class.prototype.setPrivate = function(value) {
      private = value;
   };
   Class.prototype.getPrivate = function() {
      return private;
   };
 
 
   return Class;
})();

var o1 = new Class();
var o2 = new Class();
o1.setPrivate('x');
o2.setPrivate('y');

alert( o1.getPrivate() );

danik.js 03.12.2014 18:58

Цитата:

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

Мне пожалуйста всего один, на случай, когда методы определены в прототипе (ну то есть самый верный вариант).

krutoy 03.12.2014 19:00

Цитата:

Сообщение от Siend
SomeConstructor.prototype.drawMultiSelect() {

И, кстати, откуда Вы взяли такой синтаксис?
SomeConstructor.prototype.drawMultiSelect=function(){}

надо по-идее. У Вас что, это работает?

tsigel 03.12.2014 19:04

danik.js,
А для синглтона подойдет XD

Я предпочитаю на "_" и доках выезжать. без замут с замыканиями.

Если поизвращаться, то наверно можно создать в замыкании массив объектов scope, каждый из которых соответствовал бы конкретному экземпляру.

danik.js 03.12.2014 19:06

Цитата:

Сообщение от tsigel
Я предпочитаю на "_" и доках выезжать. без замут с замыканиями.

Потому что насколько я знаю, с замыканиями не сделаешь нормально.

krutoy 03.12.2014 19:10

Цитата:

Сообщение от danik.js
Мне пожалуйста всего один, на случай, когда методы определены в прототипе (ну то есть самый верный вариант).

clos=function(arg){
var proto={get: function(){alert(this.a)}}
var o=Object.create(proto)
o.a=1
return o[arg]()
}

clos("get")

krutoy 03.12.2014 19:13

Цитата:

Сообщение от danik.js
Потому что насколько я знаю, с замыканиями не сделаешь нормально.

Замыкания -- это вообще зло, потому как это полпути к класс-ООП. Но сделать все можно.


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