Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 27.08.2011, 21:59
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

В третьем сообщении я привел такой же пример решения с помощью дополнительного свойства.
Ответить с цитированием
  #12 (permalink)  
Старый 27.08.2011, 23:18
Аватар для float
Профессор
Отправить личное сообщение для float Посмотреть профиль Найти все сообщения от float
 
Регистрация: 01.07.2010
Сообщений: 387

Цитата:
Не очень хочется иметь ненужное enumerable-свойство в каждом объекте.
Вроде можно и не иметь:
function F(x) {
		if (this.constructor == F && !F.i) {
			F.i = 1;
			this.x = x;
		}
		return this.x;
	}
	
	var f = new F(3), obj = {x: 5};
	
	alert(f.x); //3
	
	alert(F.call(obj)); //5
	alert(F.call(f)); //3
Ответить с цитированием
  #13 (permalink)  
Старый 27.08.2011, 23:30
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Так конструктор будет одноразовый
Ответить с цитированием
  #14 (permalink)  
Старый 27.08.2011, 23:35
Аватар для float
Профессор
Отправить личное сообщение для float Посмотреть профиль Найти все сообщения от float
 
Регистрация: 01.07.2010
Сообщений: 387

тфу, чуть не так хотел.
function F(x) {
		if (this.constructor == F && !this.constructor.i) {
			this.constructor.i = 1;
			this.x = x;
		}
		return this.x;
	}
	
	var f = new F(3), obj = {x: 5};
	
	alert(f.x); //3
	
	alert(F.call(obj)); //5
	alert(F.call(f)); //3

Последний раз редактировалось float, 28.08.2011 в 00:11.
Ответить с цитированием
  #15 (permalink)  
Старый 28.08.2011, 08:42
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Так в этом случае
Сообщение от float
this.constructor == F
же.
Ответить с цитированием
  #16 (permalink)  
Старый 28.08.2011, 11:57
Аватар для float
Профессор
Отправить личное сообщение для float Посмотреть профиль Найти все сообщения от float
 
Регистрация: 01.07.2010
Сообщений: 387

точно. забыл что конструктор это ссылка.
Ответить с цитированием
  #17 (permalink)  
Старый 28.08.2011, 12:50
Аватар для float
Профессор
Отправить личное сообщение для float Посмотреть профиль Найти все сообщения от float
 
Регистрация: 01.07.2010
Сообщений: 387

ну, пожалуй, последний мой вариант:
function isEmptyObj(obj) {
		var a; for(a in obj) {return false;}
		return true;
	}

	function F(x) {
		if (this.constructor == F && isEmptyObj(this)) {
			this.x = x;
		}
		return this.x;
	}
	
	var f = new F(3), obj = {x: 5};
	
	alert(f.x); // 3
	alert(F.call(obj)); // 5
	alert(F.call(f)); // 3

Последний раз редактировалось float, 28.08.2011 в 13:03.
Ответить с цитированием
  #18 (permalink)  
Старый 28.08.2011, 13:58
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Только hasOwnProperty надо добавить.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получить элемент, на котором была вызвана функция barcelona Общие вопросы Javascript 15 06.07.2013 03:44
О фрилансе (Личный опыт) free Оффтопик 105 18.08.2011 17:02
Поюзайте хомячка Nanto Ваши сайты и скрипты 30 06.06.2011 22:16
Выполняется функция, а все что написано после нее игнорируется, libinstyle Элементы интерфейса 4 24.03.2010 16:44
есть ли стандартная функция вывода сожержимого массива что то вроди print_r в PHP??? mazovski Events/DOM/Window 4 20.08.2009 12:52