찾다

 >  Q&A  >  본문

javascript - vue2에서 __ob__을 사용하여 데이터를 제거하는 방법은 무엇입니까?

으아악

콘솔의 This.source[this.schema_key]는 다음과 같습니다

으아악

이러한 데이터를 직접 얻을 수 있는 방법이 있나요

으아악
给我你的怀抱给我你的怀抱2836일 전1771

모든 응답(3)나는 대답할 것이다

  • PHPz

    PHPz2017-05-19 10:23:14

    __ob__: 관찰자이 데이터는 vue 프레임워크에서 데이터에 대해 설정한 모니터이며 일반적으로 열거할 수 없습니다. __ob__: Observer这些数据是vue这个框架对数据设置的监控器,一般都是不可枚举的。

    console.log这样的打印函数,被打印的变量会执行自身的toString(),这样,即便内部属性是不可枚举,实际上也能看到。举个例子:

    const obj = {
        a: 0,
        b: 1
    };
    Object.defineProperty(obj, 'b', {
        writable: false,
        enumerable: false,
        configurable: false
    });
    
    console.log(obj);    // Object {a: 0, b: 1}

    因为你已经将数据绑定在了vue之中,vue就肯定要为数据添加监控器的,如果你强制删掉了这些监控器,那么这些数据也就失去了监控,那么你使用vue的意义何在……


    如果仅仅是去掉这些监控器而不考虑后果的话,把对象复制一份就行了,因为复制的对象是不包含不可枚举属性的。

    const obj1 = {
        a: 0,
        b: 1
    };
    Object.defineProperty(obj1, 'b', {
        writable: false,
        enumerable: false,
        configurable: false
    });
    const obj2 = Object.assign({}, obj1);
    
    console.log(obj2);    // Object {a: 0}

    js这类动态语言,复制对象是个很头疼的事情。我写了个简单的,你可以参考一下:

    //对象深复制,不考虑循环引用的情况
    function cloneObj(from) {
        return Object.keys(from)
            .reduce((obj, key) => (obj[key] = clone(from[key]), obj), {});
    }
    //数组深复制,不考虑循环引用的情况
    function cloneArr(from) {
        return from.map((n) => clone(n));
    }
    // 复制输入值
    function clone(from) {
        if (from instanceof Array) {
            return cloneArr(from);
        } else if (from instanceof Object) {
            return cloneObj(from);
        } else {
            return (from);
        }
    }
    
    const obj = [
        {
            name: '1'
        },
        {
            name: '2'
        }
    ];
    const obj2 = clone(obj);
    console.log(obj2);

    在外面直接用clone()

    console.log와 같은 인쇄 기능의 경우 인쇄된 변수는 자체 toString()을 실행합니다. 이러한 방식으로 내부 속성을 열거할 수 없더라도 실제로는 가능합니다. 도착. 예: 🎜 으아아아 🎜vue에 데이터를 바인딩했기 때문에 vue는 데이터에 대한 모니터를 추가해야 합니다. 이러한 모니터를 강제로 삭제하면 데이터 모니터링이 손실되므로 vue를 사용하는 이유는 무엇입니까...🎜? <시간> 🎜결과를 고려하지 않고 이러한 모니터만 제거하는 경우 복사된 개체에 열거할 수 없는 속성이 포함되어 있지 않으므로 개체를 복사하기만 하면 됩니다. 🎜 으아아아 <시간> 🎜JS와 같은 동적 언어에서는 객체를 복사하는 것이 골치 아픈 일입니다. 저는 간단한 글을 썼으니 참고하시면 됩니다: 🎜 으아아아 🎜그냥 외부에서 직접 clone() 메소드를 사용하세요. 🎜

    회신하다
    0
  • 高洛峰

    高洛峰2017-05-19 10:23:14

    데이터에는 아무런 영향이 없습니다~

    회신하다
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-19 10:23:14

    이와 마찬가지로 해결해보세요. . . .

    회신하다
    0
  • 취소회신하다