Rumah  >  Soal Jawab  >  teks badan

javascript - Bagaimana untuk mengalih keluar data dengan __ob__ dalam vue2?

data: function () {
    return {
        cityData: cityData,
        selectedOptions:this.source[this.schema_key]
    }
}

This.source[this.schema_key] pada konsol adalah seperti berikut

[24, 81, __ob__: Observer]

Adakah cara untuk mendapatkan data sedemikian secara terus

[24, 81]
给我你的怀抱给我你的怀抱2710 hari yang lalu1711

membalas semua(3)saya akan balas

  • PHPz

    PHPz2017-05-19 10:23:14

    __ob__: PemerhatiData ini ialah pemantau yang ditetapkan oleh rangka kerja vue untuk data dan secara amnya tidak boleh dikira. __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()

    Untuk fungsi pencetakan seperti console.log, pembolehubah yang dicetak akan melaksanakan toString()nya sendiri dengan cara ini, walaupun sifat dalaman tidak boleh dikira, malah Boleh juga dilihat. Contohnya: #🎜🎜# rrreee #🎜🎜#Oleh kerana anda telah mengikat data dalam vue, vue mesti menambah monitor untuk data Jika anda memadam secara paksa monitor ini, maka data akan hilang pemantauan Kemudian anda menggunakan Apakah maksud vue #
    #🎜🎜#Jika anda hanya mengalih keluar monitor ini tanpa mengambil kira akibatnya, salin sahaja objek tersebut, kerana objek yang disalin tidak mengandungi atribut yang tidak boleh dikira. #🎜🎜# rrreee
    Dalam bahasa dinamik seperti #🎜🎜#js, menyalin objek adalah sakit kepala. Saya menulis yang mudah, anda boleh merujuknya: #🎜🎜# rrreee #🎜🎜# Hanya gunakan kaedah clone() terus di luar. #🎜🎜#

    balas
    0
  • 高洛峰

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

    Ini tidak memberi kesan kepada data~

    balas
    0
  • 曾经蜡笔没有小新

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

    Begitu juga, selesaikan. . . .

    balas
    0
  • Batalbalas