복붙노트

[JQUERY] 모든 브라우저에 대한 Object.watch ()?

JQUERY

모든 브라우저에 대한 Object.watch ()?

해결법


  1. 1.(죄송합니다 교차 게시물에 대한,하지만 비슷한 질문에 준이 답변이 여기에 잘 작동)

    (죄송합니다 교차 게시물에 대한,하지만 비슷한 질문에 준이 답변이 여기에 잘 작동)

    나는 얼마 전에 이것을 위해 작은 object.watch 심 (shim)을 만들었습니다. 그것은 등 IE8, 사파리, 크롬, 파이어 폭스, 오페라, 작동


  2. 2.단순히 플러그인하여 사용하는 타이머 / 간격에 반복적으로 개체의 변경 내용을 확인합니다. 어쩌면 충분하지만 개인적으로 나는 관찰자로 더 직접성을하고 싶습니다.

    단순히 플러그인하여 사용하는 타이머 / 간격에 반복적으로 개체의 변경 내용을 확인합니다. 어쩌면 충분하지만 개인적으로 나는 관찰자로 더 직접성을하고 싶습니다.

    http://webreflection.blogspot.com/2009/01/internet-explorer-object-watch.html : 여기에 IE에 시계 / 주시 해제를 데려의 시도이다.

    그것은 관찰자를 추가하는 파이어 폭스 방식에서 구문을 변경한다. 대신에 :

    var obj = {foo:'bar'};
    obj.watch('foo', fooChanged);
    

    당신은 할 수 :

    var obj = {foo:'bar'};
    var watcher = createWatcher(obj);
    watcher.watch('foo', fooChanged);
    

    달콤한으로하지만, 관찰자로 즉시 통지되는 것은 아닙니다.


  3. 3.이 질문에 대한 대답은 약간 구식이다. Object.watch 및 Object.observe 모두 사용되지 않으며 사용할 수 없습니다.

    이 질문에 대한 대답은 약간 구식이다. Object.watch 및 Object.observe 모두 사용되지 않으며 사용할 수 없습니다.

    오늘, 당신은 지금 객체에 대한 변경 모니터 (와 절편)에 대한 프록시 객체를 사용할 수 있습니다. 다음은 기본 예제입니다 :

    var targetObj = {};
    var targetProxy = new Proxy(targetObj, {
      set: function (target, key, value) {
          console.log(`${key} set to ${value}`);
          target[key] = value;
      }
    });
    
    targetProxy.hello_world = "test"; // console: 'hello_world set to test'
    

    중첩 된 객체에 대한 변경 사항을 준수해야하는 경우에, 당신은 전문 라이브러리를 사용합니다. 내가 관찰 가능한 슬림을 발표하고이 같이 작동합니다 :

    var test = {testing:{}};
    var p = ObservableSlim.create(test, true, function(changes) {
        console.log(JSON.stringify(changes));
    });
    
    p.testing.blah = 42; // console:  [{"type":"add","target":{"blah":42},"property":"blah","newValue":42,"currentPath":"testing.blah",jsonPointer:"/testing/blah","proxy":{"blah":42}}]
    

  4. 4.현재 답변

    현재 답변

    그것의 목표에 대한 변경 사항을 볼 수있는 새로운 프록시 객체를 사용합니다.

    let validator = {
        set: function(obj, prop, value) {
            if (prop === 'age') {
                if (!Number.isInteger(value)) {
                    throw new TypeError('The age is not an integer');
                }
                if (value > 200) {
                    throw new RangeError('The age seems invalid');
                }
            }
    
            // The default behavior to store the value
            obj[prop] = value;
    
            // Indicate success
            return true;
        }
    };
    
    let person = new Proxy({}, validator);
    
    person.age = 100;
    console.log(person.age); // 100
    person.age = 'young'; // Throws an exception
    person.age = 300; // Throws an exception
    

    2015에서 오래 대답

    당신은 ES7에서 사용 Object.observe ()를 가질 수있다. 여기 polyfill입니다. 그러나 Object.observe은 ()가 취소됩니다. 죄송합니다 사람!


  5. 5.크롬 36 이상 당신이 아니라 Object.observe를 사용할 수 있습니다. 이 사실은 미래의 인 ECMAScript 표준의 일부, 그리고 모질라의 Object.watch 같은 브라우저 별 기능입니다.

    크롬 36 이상 당신이 아니라 Object.observe를 사용할 수 있습니다. 이 사실은 미래의 인 ECMAScript 표준의 일부, 그리고 모질라의 Object.watch 같은 브라우저 별 기능입니다.

    Object.observe는 개체 속성에 작동하지만, 훨씬 더 성능이 좋은 (디버깅 목적이 아닌 생산 용으로 의미) Object.watch보다.

    var options = {};
    
    Object.observe(options, function(changes) {
        console.log(changes);
    });
    
    options.foo = 'bar';
    

  6. 6.당신은 Object.defineProperty를 사용할 수 있습니다.

    당신은 Object.defineProperty를 사용할 수 있습니다.

    foo는의 속성 표시 줄을 볼

    Object.defineProperty(foo, "bar", {
      get: function (val){
          //some code to watch the getter function
      },
    
      set: function (val) {
          //some code to watch the setter function
      }
    })
    

  7. 7.내 프로젝트 중 하나에 Watch.js을 사용하고 있습니다. 그리고는이 라이브러리를 사용하는 주요 장점의 fine.One을하고있다 :

    내 프로젝트 중 하나에 Watch.js을 사용하고 있습니다. 그리고는이 라이브러리를 사용하는 주요 장점의 fine.One을하고있다 :

    이 예는 다음과 주어진다

    // 우리가 좋아하지만 우리의 객체를 정의 var에 EX1의 = { ATTR1 "ATTR1의 초기 값" ATTR2 "ATTR2의 초기 값" }; // 속성에 대한 '감시자'를 정의 시계 (EX1, "ATTR1"함수 () { 경고 ( "ATTR1 변경!"); }); 속성을 변경할 때 // 그 감시자가 호출됩니다 ex1.attr1 = "이외의 값"; <스크립트 SRC = "https://cdn.jsdelivr.net/npm/melanke-watchjs@1.5.0/src/watch.min.js">

    이것은이 한 간단합니다!


  8. 8.나는 또한 최적의 솔루션이 여기에 좋은 튜토리얼을 찾아 Watch.JS을 사용하는 것입니다 지금 그렇게 생각 : 자바 스크립트에서 객체 또는 배열 변경 / 시계를 들어 (자바 스크립트 객체에 속성 이벤트를 변경)

    나는 또한 최적의 솔루션이 여기에 좋은 튜토리얼을 찾아 Watch.JS을 사용하는 것입니다 지금 그렇게 생각 : 자바 스크립트에서 객체 또는 배열 변경 / 시계를 들어 (자바 스크립트 객체에 속성 이벤트를 변경)

  9. from https://stackoverflow.com/questions/1029241/object-watch-for-all-browsers by cc-by-sa and MIT license