Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Создание прототипа (https://javascript.ru/forum/misc/62301-sozdanie-prototipa.html)

warren buffet 16.08.2016 13:58

А он и не находит если не курит ту же самую траву https://jsfiddle.net/mq6ubzem/1/

warren buffet 16.08.2016 14:17

DivMan, прекращай фигней страдать, уже не смешно.

Функция - это подпрограмма, то есть кусок кода лежащий ВНЕ пути следования процессора. Представь себе дорогу - по ней едет телега - это процессор, а по бокам дороги деревни и села и бордели. Если не сворачивать - так и проедешь не увидав ни одной телки, а если свернуть в заведение - то окажешься внутри заведения и там будут телки. Когда ты заходишь в заведение тебя регистрируют - ДивМэн, приехал в 21:34, один, без халата. Когда выходишь из заведения - тебя снимают с регистрации: ДивМэн, 8:12, взял с собой халат. Сколько ты там поимел телок - никому кроме заведения не известно. Это и называется - подпрограмма. То есть кусок кода на адрес которого процессор посылается специальной командой, выполняет коды с этого адреса, доходит до команды возврата на трассу и возвращается на следующий после вызова подпрограммы адрес.

Функция - это подпрограмма и более ничего. Это помещение со своими стенами и барахлом внутри. Это полная изоляция своего барахла от внешнего мира в своем собственном адресном пространстве. В некоторых языках так устроены не только функции, но и конструкции вроде if(), for(), где все что объявлено внутри () оказывается внутри стен помещения.

То есть смотри, на дороге общего пользования проходящей мимо борделей у нас все публичное, а внутри помещений - частное, или приватное. Есть еще одна разновидность формы собственности - защищенная, это все барахло лежащее во дворе помещения, то есть не внутри и не на дороге. Но в жабе protected явно не объявляется.

И вот возникает задача как-то получить частное из функции ДО завершения ее работы, в любой произвольный момент так сказать. Для этого и придумана такая форма функции как класс или его рабочая копия - объект.

Когда ты внутри функции пишешь this.name = 'Вася'; то значит хочешь сделать так, чтобы можно было получить из ее значение частной переменной name, положить в грузовик и увезти по дороге в другое помещение. Не саму переменную, а ее значение, то есть груз.

Все остальное - это всего лишь синтаксис и усложнение этой элементарной простоты подпрограмм, помещение которых оборудовано окнами приема-выдачи всякого барахла.

Прекращай выдумывать собственную реальность и не кури траву.

DivMan 16.08.2016 15:14

Да я реально не понимаю

DivMan 16.08.2016 15:15

А вот это нормальный код для калькулятора?
https://jsfiddle.net/yhvguf9o/

DivMan 16.08.2016 17:41

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

https://jsfiddle.net/vrbse5qg/2/

warren buffet 16.08.2016 18:37

Если ты хочешь сделать калькулятор, который будет считать выражения вроде 3+5-(sqr(3)-lg(4))/2.56*0.001 и так далее, тебе не нужна вся эта тряхомудия классического жанра. Тебе нужен токенизатор, то есть программа, которая разбирает любое математическое выражение или форумул на токены и вычисляет токены и выдает результат. В сущности у любого парсера в том числе такого языка как жаба на фронтире токенизатор.

warren buffet 16.08.2016 18:50

Цитата:

Сообщение от DivMan
почему

Потому что ты задолбал. Какие нахрен тебе нужны прототипы вообще? Кто тебя надоумил этой хренью заниматься? Я написал тысячи строк кода на жабе и ни разу не написал .prototype

Попробуй разъяснить за каким членом корреспондентом ты рисуешь эти бредовые конструкции.

Если объект создается по условиям, динамически, ты можешь его строить совершенно обычным образом.

var Foo = function(){};

Foo.name =  null;

if(bar)
   Foo.setName=function(name){
      this.name=bar+' '+name; 
   };
else
  Foo.name=function(){
    this.name=name;
  };


Все то же самое можно сделать внутри самой функции используя this, вот реальный пример

if(history.pushState)

	this.run=function(e){

		if(!e || !e.target) return;
		
		var p,el=e.target,url=el.href;
		
		if(!url) {
		
			if((el=el.closest('[data-id]')) 
				&& (p=el.querySelector('a[href]')))	url=p.href;
				
			else return;
		
		}
		
		if(el.closest('main')) le=el;
		
		stoPe(e);
		ajax(url,set_page);

	};
	
else
	this.run=function(e){
		cOpen(e.target,opts.tmb_css);
	};


Прекращай галиматью постить, над тобой же смеются.

DivMan 16.08.2016 20:28

Это мне надо делать, для того, что бы понять прототипы

warren buffet 16.08.2016 20:44

Кстати я тут пропустил эти самые прототипы

Foo.setName=function(name){ - так нельзя, надо

Foo.prototype.setName=function(name){

Цитата:

Сообщение от DivMan
что бы понять прототипы

Просто подожди еще немного пока ECMA6 устаканится и не придется этой галиматьи понимать. Там уже есть классы и наследование и конструкторы и доступ к родителю.

warren buffet 16.08.2016 20:49

Цитата:

Сообщение от DivMan
что бы понять прототипы

Для практики можешь понимать так. Там где внутри функции this, там снаружи в дизайн-тайм - prototype.

Прототипирование - это ниточка с бусами, ну, цепочка, оно так и называется prototype chain. Просто выделили проперть с зарезервированным именем для связи между объектами и протащились.

А в классах наследование - это метафора наложения одного чертежа на другой чертеж. Ну или как в мультипликации наложение одного целлулоида на другой.


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