 
			
				08.06.2015, 11:13
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Новичок 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 05.09.2010 
					
					
					
						Сообщений: 2,298
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
			
			 
				Можно ли как-то отловить удаление свойства оператором delete?
			 
			
		
		
		
		Сабж. Использую Object.defineProperty (Object.observe и Proxy не предлагайте), может есть хак какой-нибудь? 
		
	
		
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				08.06.2015, 18:22
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Интересующийся 
				
				
				
				
	
 
 
			 | 
			  | 
			
				
				
					Регистрация: 07.06.2015 
					
					
					
						Сообщений: 26
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
<html>
<head>
</head>
<body>
<p id="p" name="Paragraph">foo</p>
<script>
SubObject={
 clone: function(){
  var o=Object.create(this)
  if(this.init) this.init.call(o)
  return o
 },
 extend: function(o){
  for(var i in o) {if(!o.hasOwnProperty(i)) return this; this[i]=o[i]}
  return this
}
}
DOMEvent=SubObject.clone()
 .extend({
   addTo: function(HTMLObject){
     HTMLObject.addEventListener(this.actionName, this.self)
     HTMLObject.addEventListener(this.actionName, this.emit)
   },
   init: function(){
     this.listeners=[]
     this.emit=function(){this.listeners.forEach(function(listener){listener.notify()})}.bind(this)
   },
   addListener: function(listener){this.listeners.push(listener)},
  })
Notifier=SubObject.clone()
 .extend({
   init: function(){this.listeners=[]},
   add: function(obj){this.listeners.push(obj); obj[this.action.name]=this.action},
   notify: function(){var name=this.action.name; this.listeners.forEach(function(listener){listener[name]()})}
 })
Person=function(name, job){this.name=name; this.job=job}
person1=new Person("Jack", "doctor")
person2=new Person("John", "police officer")
with(notifier=Notifier.clone()){
  extend({action: function hello(){alert("Hello, my name is "+this.name+" and I am "+this.job)}})
  add(person1)
  add(person2)
}
with(DOMEvent.clone()){
 extend({
   actionName: "click",
   self: function(){alert("Hi, friends! I am HTML"+this.getAttribute("name")+". And who are you?")},
})
 addTo(p)
 addListener(notifier)
}
</script>
</body>
</html>
 
		
	
		
		
		
		
		
		
	
		
			
			
	
			
			
			
			
			
				 
			
			
			
			
			
			
				
			
			
			
		 
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				08.06.2015, 18:37
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Новичок 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 05.09.2010 
					
					
					
						Сообщений: 2,298
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 pornoborets, да, за флуд. 
		
	
		
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				08.06.2015, 18:43
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Интересующийся 
				
				
				
				
	
 
 
			 | 
			  | 
			
				
				
					Регистрация: 07.06.2015 
					
					
					
						Сообщений: 26
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 FINoM, 
 Так вот слушай, пень, один хрен, мой бан, это вопрос времени. Дело в том, что ты дегенерат. Твой вопрос, сводится к "как я могу иметь свое собтыие?", и абсолютно похеру, какое это именно событие, и какие обработчики. Я выложил, мудак, пример построения интерфейсов для таких событий. Но в силу твоего скудоумия, а также нулевого знания програмирования, ты, естественно ждешь, что тебе выложат готовый скрипт, конкретно для твоего случая, что вполне естественно для дауна. Вот это "настоящий" ответ на твой вопрос, а заодно и на твой коммент. Ты, собственно, это все и сам знаешь, просто дурочку валяешь. 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				08.06.2015, 18:48
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Новичок 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 05.09.2010 
					
					
					
						Сообщений: 2,298
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 pornoborets, лол. 
 
Товарищи модераторы, уберите эту интересную личность, пожалуйста. 
		
	
		
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				08.06.2015, 20:28
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 30.04.2012 
					
					
					
						Сообщений: 3,018
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от FINoM
			
		
	 | 
 
	| 
		Товарищи модераторы, уберите эту интересную личность, пожалуйста.
	 | 
 
	
 
 Убрал.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				08.06.2015, 22:18
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 07.03.2011 
					
					
					
						Сообщений: 1,141
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от FINoM
			
		
	 | 
 
	| 
		Можно ли как-то отловить удаление свойства оператором delete?
	 | 
 
	
 
 Можно простой проверкой на наличие в данный момент данного свойства. 
(условное ветвление алгоритма) Но что то подсказывает что имелось что то другое в виду =).
 
delete - это оператор языка. 
перегрузки операторов в JS нет.
 
Пока это звучит как просьба подсказать неизвестный костыль для решения неизвестной задачи 
(слишком много неизвестных).  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				09.06.2015, 00:49
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Новичок на форуме 
				
				
				
				
	
 
 
			 | 
			  | 
			
				
				
					Регистрация: 08.06.2015 
					
					
					
						Сообщений: 7
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от MallSerg
			
		
	 | 
 
	| 
		перегрузки операторов в JS нет.
	 | 
 
	
 
 Это как-раз кривой костыль для ЯП, где не реализована нормальная семантика посылки сообщений. В нормальном языке она не нужна. Нет ничего такого, что можно сделать с перегрузкой, но нельзя сообщениями. 
 
sum=function(x, y){return x + y}
Number.prototype.sum=function(x){return this+x}
Array.prototype.sum=function(x){return this.reduce(sum) + x.reduce(sum)}
console.log(
 1..sum(2),
 [1,2,3].sum([3,4,5])
)
//>>>> 3 18
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				09.06.2015, 12:43
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Новичок 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 05.09.2010 
					
					
					
						Сообщений: 2,298
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от MallSerg
			
		
	 | 
 
	| 
		Пока это звучит как просьба подсказать неизвестный костыль для решения неизвестной задачи
	 | 
 
	
 
 Есть функция которая создает объект навешивая необходимые акцессоры, и нужно навесить "обработчик" вызова delete.
 
Псевдокод:
 
x = createObject({
	a: 1,
	b: 2
});
x.a; // вызывается геттер
x.a = 22; // вызывается сеттер
delete x.a; // что нужно сделать, чтоб отловить это?
Можно после вызова геттера запускать таймаут и проверять свойство оператором in или методом hasOwnProperty, но это сильно повлияет на производительность + код не будет последовательным.
 
Я понимаю, что внутренних механизмов для этого не предусмотрено, просто надеюсь на остроумие здешних завсегдатаев.  
		
	
		
		
		
		
		
			
		
		
		
		
		
						  
				
				Последний раз редактировалось FINoM, 09.06.2015 в 12:46.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				09.06.2015, 13:58
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 12.12.2012 
					
					
					
						Сообщений: 1,398
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		FINoM, 
 Если код ваш, оберните delete в функцию типа
  
 
var myDelete = function (object, keyToDelete) {
   delete object[keyToDelete];
   alert('delete event');
 }
 myDelete(x, 'a');
Ну а если так сделать по каким-либо причинам нельзя, то возможно стоит что-то сделать чтобы это событие было не нужно? Честно говоря, я не самый опытный, но у меня иногда были необходимости в таких вещах и каждый раз это решалось сменой подхода к решению задачи. Необходимость просто отпадала. 
 
Может если вы опишете задачу чуть глобальнее, то кто-то подскажет другое решение?  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |