Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 28.01.2012, 23:13
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от Livaanderiamarum
Черт, без __proto__ сложно))
да)
Сообщение от Livaanderiamarum
блин, нельзя создать функцию ни чем кроме как конструктром Function((?
ну, обычное объявление функции, как function(){}
МОжет еще как-то, но я не в курсе

Кстати, желательно как-раз таки чтобы для таких функций работало(если вдруг способ окажется рабочим только для одного варианта создания функции), как более часто используемых.
Но, у этих функций все равно конструктором является Function, и в качестве прототипа используется Function.prototype

А переопределить этот прототип нельзя - только дополнить
Ответить с цитированием
  #12 (permalink)  
Старый 28.01.2012, 23:20
Профессор
Посмотреть профиль Найти все сообщения от Livaanderiamarum
 
Регистрация: 25.12.2011
Сообщений: 786

function FunctionX(args, body) {
	//бейкапим прототип
	var temp = Function.prototype
	//делаем наш прототип
	Function.prototype = {}
	//создаем с нашим прототипом, теперь __proto__ ведет именно на наш обьект
	var func = new Function(args, body)
	//возвращаем старый прототип на место
	Function.prototype = temp
	//возвращаем свежесозданную функцию
	return func
}

var q = FunctionX("", "return 1")
q()



только вот одна мелочь, эта херня не работает((((((((((((((
Ответить с цитированием
  #13 (permalink)  
Старый 28.01.2012, 23:22
Профессор
Посмотреть профиль Найти все сообщения от Livaanderiamarum
 
Регистрация: 25.12.2011
Сообщений: 786

Сообщение от Gvozd
А переопределить этот прототип нельзя - только дополнить
а, ну вот и я про то. А почему нельзя? Потому что он встроеный?
Ответить с цитированием
  #14 (permalink)  
Старый 28.01.2012, 23:33
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от Livaanderiamarum
только вот одна мелочь, эта херня не работает((((((((((((((
да, через это я уже прошел.
Сообщение от Livaanderiamarum
А почему нельзя? Потому что он встроены
Без понятия.
Я пришел к этому факту, через эксперимент, но полагаю на этот счет в стандарте написано что-нибудь умное и логичное. Но я пока что не смотрел его в поисках этого вопроса.

Но, судя по-всему придется
Ответить с цитированием
  #15 (permalink)  
Старый 28.01.2012, 23:54
Профессор
Посмотреть профиль Найти все сообщения от Livaanderiamarum
 
Регистрация: 25.12.2011
Сообщений: 786

А новые функции должны обладать методами обычных функций?
Ответить с цитированием
  #16 (permalink)  
Старый 29.01.2012, 00:09
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от Livaanderiamarum
А новые функции должны обладать методами обычных функций?
Желательно.
Но в обычных функциях методы из прототипа приходят, так что вопрос хороший.
Наверно из-за этого и не дается его перегрузить

Но, на крайняк можно нафаршировать новую функцию нужными методами напрямую, либо указать в качестве прототипа прототипа - обычную функцию.

Так, что допустим, что необязательно обладать методами.
Достаточно чтобы она просто умела выполнятся.
Ответить с цитированием
  #17 (permalink)  
Старый 29.01.2012, 00:40
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Сообщение от Gvozd
Так, что допустим, что необязательно обладать методами.
Достаточно чтобы она просто умела выполнятся.
Да так не интересно, можно и в iframe напичкать Function.prototype своими методами и достать от туда. Хочется, чтобы изменения в обоих прототипах отражались на созданной функции…
Ответить с цитированием
  #18 (permalink)  
Старый 29.01.2012, 00:40
Профессор
Посмотреть профиль Найти все сообщения от Livaanderiamarum
 
Регистрация: 25.12.2011
Сообщений: 786

Почти доделал
-------------------------------------------
Сообщение от Octane
можно и в iframe напичкать Function.prototype
я так и сделал) но замыкание. функции созданые во фрейме замыкают его область видимости? даже with не помогает
-------------------------------------------
<body>
<script>
function FunctionX(arg, bod) {
	var alert = alert
	var el = document.createElement("iframe");
	document.body.appendChild(el);
	var proto = arguments.callee.prototype
	for ( var i in proto) {
		window.frames[0].Function.prototype[i] = proto[i]
	}
	
	var func = window.frames[0].Function(arg, bod)
	window.document.body.removeChild(el)
	return func
}
FunctionX.prototype.qq = function() {
	alert('НЯЯЯ)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!111')
}

var q = FunctionX('', 'alert("fff")')
q()
</script>
</body>


не работает потому что алерта в айфрейме больше нет

Последний раз редактировалось Octane, 29.01.2012 в 01:11. Причина: Объединение сообщений
Ответить с цитированием
  #19 (permalink)  
Старый 29.01.2012, 00:53
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Напрашивается вопрос:

раз уж есть стандартное средство получить __proto__
var x = {};
alert(Object.getPrototypeOf(x) === x.__proto__);

и есть способ создать новый объект, с указанным __proto__
var x = Object.create(Function.prototype);
alert(x.__proto__ === Function.prototype);

то почему стандарт не предусматривает метод для изменения __proto__ созданного объекта?
Ответить с цитированием
  #20 (permalink)  
Старый 29.01.2012, 00:56
Профессор
Посмотреть профиль Найти все сообщения от Livaanderiamarum
 
Регистрация: 25.12.2011
Сообщений: 786

Сообщение от Octane Посмотреть сообщение
Напрашивается вопрос:

раз уж есть стандартное средство получить __proto__
var x = {};
alert(Object.getPrototypeOf(x) === x.__proto__);

и есть способ создать новый объект, с указанным __proto__
var x = Object.create(Function.prototype);
alert(x.__proto__ === Function.prototype);

то почему стандарт не предусматривает метод для изменения __proto__ созданного объекта?
или почему метод не позволяет делать так

Object(обьект, егоПрототип)

или почему нет метода вот так

Обьект.chengePrototype(новыйПрото ип)
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передать ссылку на объект а не объект возникновения события Blazze Events/DOM/Window 0 11.10.2011 00:45
jQuery - объект или функция? jazzz13 jQuery 8 16.08.2011 04:01
функция должна возвращать объект без одного свойства blackzub Общие вопросы Javascript 4 14.12.2009 19:25
Модуль для работы с модулями JSprog Ваши сайты и скрипты 29 02.09.2009 13:31
Получить объект содержащий caller no_alex Общие вопросы Javascript 14 20.03.2009 21:37