2010-08-12 2 views
1

https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Object/watchJavaScript: Mozilla Просматривайте() функциональность для всех свойств объекта (возможно, кросс-браузер)

Просматривайте (метод) делает это короче: «Часы для свойства, чтобы быть присвоено значение и выполняет функцию, когда это происходит ».

Длинная описательная форма: «Часы для присвоения собственности с именем prop в этом объекте, вызывающий обработчик (prop, oldval, newval), когда установлен prop и сохраняется возвращаемое значение в этом свойстве. Точка наблюдения может фильтровать (или аннулировать) присвоение значения, возвращая измененный newval (или возвращая oldval). "

Существует вопрос для заставить его работать во всех браузерах здесь: Object.watch() for all browsers?

Ищу что-то похожее на это. То, что я ищу, - это метод, который я могу использовать, чтобы соответствовать этой спецификации: «Часы для назначения любому свойству в этом объекте и выполняет функцию, когда это происходит». Основное различие заключается в том, что это любое свойство и просто любое конкретное свойство.

Может кто-нибудь создать такой метод или если они знают, что такой метод уже существует, ссылайтесь на него? Было бы полезно, если бы он работал во всех браузерах (минус IE или минус IE8, если соответствует IE9)

Редактировать: Для примера, что я имею в виду, я покажу, для чего он нужен.

var DiscreteLine = function (leftBound, length){ 
    this.positive = []; 
    this.negative = []; 
    this.length = length; 
    this.leftBound = leftBound; 
    this.rightBound = leftBound + length 

    if (this.leftBound < 0){ 
    this.negative.length = (leftBound * -1) + 1; 
    } else { 
    this.negative.length = 0; 
    } 
    if (this.rightBound >= 0){ 
    this.positive.length = rightBound + 1; 
    } else { 
    this.positive.length = 0; 
    } 

    this.watchObject = new ObjectWatcher(handler(prop, oldval, newval){ /* some stuff */ }); 

} 

Затем, когда, например, если кто-то сделал следующее:

theLine = new DiscreteLine(-2, 4); 
theLine[-8] = 10; 

Обработчик бы назвать, с аргументами ("-8", неопределенных, 10). (Что бы закончилось, так это то, что скрипт автоматически пересчитает свойства leftBound и length (например, как автоматически обновляет свойство длины массива).

ответ

0

Это в основном потребовало бы переопределения сеттера для свойства уже определенного объекта. Насколько я знаю, это возможно только в ECMAScript 5 (через Object.defineProperty), и на данный момент я не уверен, какие браузеры поддерживают это, если вообще, так что это не будет «кросс-браузер», как вы

Редактировать: Ваш пример делает ваше требование понятным сейчас. Я боюсь, что язык не предоставляет никакого способа уведомления, когда к объекту добавляются новые свойства. В вашем примере вы действительно не знаете, t есть выбор e xcept заменить нотацию массива вызовом функции.

+0

Я не вижу, как можно создать наблюдателя обо всех свойствах объекта с использованием этого метода. Кроме того, Firefox 4.0 будет поддерживать его, как минимум. Это позволяет изменять ключевые аспекты свойства (что-то полезное для меня в любом случае), но не для просмотра объекта. – Havvy