как вариант
(function(name) { var el = document.createElement("iframe"); document.body.appendChild(el); window[name] = window.frames[0].Function })('FunctionX') FunctionX.prototype.qq = function() { alert('НЯЯЯ)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!111') } var q = FunctionX('', 'alert("fff")') q() |
Цитата:
Хотя, все еще нельзя задать использовать в качестве prototype уже существующий объект. Но зато это уже независимый от основного окна прототип, который можно использовать для самостоятельного класса функций. Тот факт, что используется конструктр FUnction(args, code) исправляется оберткой, оборачивающей любую готовую функцию Интересно, есть ли все-таки способ использовать уже существующий объект? |
<body> <script> (function(name) { var el = document.createElement("iframe"); document.body.appendChild(el); window[name] = function(arg, bod) { with (window.parent) { return window.frames[0].Function(arg, bod) } } window[name].prototype = window.frames[0].Function.prototype })('FunctionX') FunctionX.prototype.qq = function() { alert('НЯЯЯ)!!!11') } var q = FunctionX('', 'alert("fff")') var w = Function('', 'alert("fff")') q() q.qq() w() w.qq() </script> </body> решил проблему с замыканием в области фрейма. п.с. на сайте метод qq не запускается из-за вложенного фрейма. к сожалению iFrame удалять нельзя потому что у созданых функций ссылка в __прото__ лежит на прототип в конструкторе айфреймовском. |
В общем почитал я справочник, и в общем выяснилось, что нельзя для функции использовать свой прототип, на любом уровне наследования
Подробнее: http://javascript.ru/ecma/part13#a-13.2 Цитата:
Цитата:
Цитата:
alert(Function.prototype.__proto__ == Object.prototype); //true alert(Object.prototype.__proto__); //null |
ну справочник вообще не говорит что оно доступно должно быть [[ ]] же, свойство внутреннее. ну вот, способ вроде рабочий нашли же вроде как))
скрываешь iframe и все)) |
Скорей бы добавили возможность менять атрибуты свойств, как обещали.
|
Цитата:
Если о свойстве [[Prototype]], то оно недокументировано доступно как __proto__ В варианте с Iframe это никак не использовалось, так что я не понял какой рабочий способ нашли? Цитата:
А вот для собственных объектов было бы очень неплохо Livaanderiamarum, Спасибо за беседу) |
Цитата:
|
Livaanderiamarum, мне кажется или так проще?
var FunctionX = Function; var a = FunctionX('', 'return 1'); FunctionX.prototype.proto1 = function() { return 2; }; Function.prototype.proto2 = function() { return 3; }; alert([ a(), //1 a.proto1(), //2 a.proto2(), //3 a instanceof FunctionX, //true a instanceof Function //true ]) PS: не читал весь тред |
Не он хочет так:
// ... FunctionX.prototype.proto = function() { alert('proto') } Function.prototype.proto2 = function() { alert('proto2') } var a = FunctionX('', 'alert("FunctionX")'); var b = Function('', 'alert("Function")'); a() //FunctionX a.proto() //proto a.proto2() //proto2 b() //Function b.proto() //b.proto is not a function b.proto2() //proto2 |
Часовой пояс GMT +3, время: 12:42. |