Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 16.08.2016, 11:18
Профессор
Отправить личное сообщение для DivMan Посмотреть профиль Найти все сообщения от DivMan
 
Регистрация: 08.03.2016
Сообщений: 429

Как интерпретатор находит функцию getName в __proto_, если её там нету? Она находится не в __proto_ а в конструкторе

https://jsfiddle.net/mq6ubzem/

http://i77.fastpic.ru/big/2016/0816/...c92037b9ac.jpg
Ответить с цитированием
  #22 (permalink)  
Старый 16.08.2016, 13:58
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

А он и не находит если не курит ту же самую траву https://jsfiddle.net/mq6ubzem/1/
Ответить с цитированием
  #23 (permalink)  
Старый 16.08.2016, 14:17
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

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

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

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

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

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

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

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

Прекращай выдумывать собственную реальность и не кури траву.
Ответить с цитированием
  #24 (permalink)  
Старый 16.08.2016, 15:14
Профессор
Отправить личное сообщение для DivMan Посмотреть профиль Найти все сообщения от DivMan
 
Регистрация: 08.03.2016
Сообщений: 429

Да я реально не понимаю
Ответить с цитированием
  #25 (permalink)  
Старый 16.08.2016, 15:15
Профессор
Отправить личное сообщение для DivMan Посмотреть профиль Найти все сообщения от DivMan
 
Регистрация: 08.03.2016
Сообщений: 429

А вот это нормальный код для калькулятора?
https://jsfiddle.net/yhvguf9o/
Ответить с цитированием
  #26 (permalink)  
Старый 16.08.2016, 17:41
Профессор
Отправить личное сообщение для DivMan Посмотреть профиль Найти все сообщения от DivMan
 
Регистрация: 08.03.2016
Сообщений: 429

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

https://jsfiddle.net/vrbse5qg/2/
Ответить с цитированием
  #27 (permalink)  
Старый 16.08.2016, 18:37
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Если ты хочешь сделать калькулятор, который будет считать выражения вроде 3+5-(sqr(3)-lg(4))/2.56*0.001 и так далее, тебе не нужна вся эта тряхомудия классического жанра. Тебе нужен токенизатор, то есть программа, которая разбирает любое математическое выражение или форумул на токены и вычисляет токены и выдает результат. В сущности у любого парсера в том числе такого языка как жаба на фронтире токенизатор.
Ответить с цитированием
  #28 (permalink)  
Старый 16.08.2016, 18:50
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Сообщение от 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);
	};


Прекращай галиматью постить, над тобой же смеются.
Ответить с цитированием
  #29 (permalink)  
Старый 16.08.2016, 20:28
Профессор
Отправить личное сообщение для DivMan Посмотреть профиль Найти все сообщения от DivMan
 
Регистрация: 08.03.2016
Сообщений: 429

Это мне надо делать, для того, что бы понять прототипы
Ответить с цитированием
  #30 (permalink)  
Старый 16.08.2016, 20:44
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

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

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

Foo.prototype.setName=function(name){

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание Конструктора sheckler Элементы интерфейса 1 25.05.2015 12:02
Создание функции вне прототипа e41zytp Общие вопросы Javascript 7 21.05.2014 11:44
Создание прототипа функции Chiz Events/DOM/Window 8 30.10.2013 22:31
Создание своей библиотеки. Создание двух одинаковых объектов. Как избежать? IDCh Javascript под браузер 2 31.10.2012 12:53
Создание скрипта "Итеррационные циклы" по формуле krasopetka Общие вопросы Javascript 0 17.11.2011 12:42