Тема: VBScript/JScript Реализация полноценных Setters/Getters в IE
Здравствуйте!
Мне нужно реализовать Setters/Getters в Internet Explorer при чтении/записи определенных свойств объекта JScript. Это возможно сделать, как я понял, исключительно средствами VBScript. В VBScript я - совершенный zero, как это не печально, поэтому прошу помощи.
Значит, производим следующую последовательность действий:
1. На страничке пишем JScript с обработчиками событий, которые будут вызываться при чтении/записи нужных свойств объекта:
<script type="text/jscript">
function getProp(propName) {
//Что-нибудь откуда-нибудь возвращаем.
};
function setProp(propName, propVal) {
//Что-нибудь куда-нибудь записываем.
};
//Кстати, у меня не получилось потом обратиться к созданному объекту в пределах глобальной области видимости, поэтому, такой танец с бубном:
function setObjAsTop(obj) {
window.MyObject = obj;
};
</script>
2. Далее, пишем VBScript с классом, из которого затем объявим объект, в котором нам, собственно, и нужны будут Setters/Getters.
<script type="text/vbscript">
Class MyClass
Public Property Let myProperty(val)
'Обрабатываем скалярные значения
setProp "myProperty", val
End Property
Public Property Set myProperty(val)
'Обрабатываем объекты
setProp "myProperty", val
End Property
Public Property Get myProperty()
myProperty = getProp "myProperty"
End Property
End Class
Dim MyObject
Set MyObject = New MyClass
'Исполняем танец:
setObjAsTop MyObject
</script>
3. Ну и проверяем:
<script type="text/jscript">
MyObject.MyProperty = 42; //Работает!
MyObject.MyProperty = {foo: 'bar'}; //Работает!
var foo = MyObject.MyProperty; //Работает!
</script>
Вроде бы, все замечательно, НО! Если нам вдруг понадобится создать ранее не объявленное свойство, напр. MyObject.foo = 'bar', то IE выдаст ошибку Объект не поддерживает это свойство или метод.
Короче, нормально пользоваться этим объектом из JScript нельзя.
Ну, и вопрос: Возможно ли это исправить или обойти?
Спасибо.