javascript - Comment supprimer des données avec __ob__ dans Vue2?
给我你的怀抱
给我你的怀抱 2017-05-19 10:21:14
0
3
1738
data: function () {
    return {
        cityData: cityData,
        selectedOptions:this.source[this.schema_key]
    }
}

This.source[this.schema_key] sur la console est la suivante

[24, 81, __ob__: Observer]

Existe-t-il un moyen d'obtenir directement ces données

[24, 81]
给我你的怀抱
给我你的怀抱

répondre à tous(3)
PHPzhong

__ob__ : ObserverCes données sont des moniteurs définis par le framework vue pour les données et sont généralement non dénombrables. __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()

Pour les fonctions d'impression comme console.log, la variable imprimée exécutera son propre toString() De cette façon, même si les propriétés internes ne sont pas énumérables, elles peuvent en fait. être vu arriver. Par exemple : 🎜 rrreee 🎜Étant donné que vous avez lié les données dans vue, vue doit ajouter des moniteurs pour les données. Si vous supprimez ces moniteurs de force, les données perdront la surveillance, alors à quoi sert vue Où est...🎜 ?
🎜Si vous supprimez simplement ces moniteurs sans considérer les conséquences, copiez simplement l'objet, car l'objet copié ne contient pas d'attributs non énumérables. 🎜 rrreee
🎜Dans les langages dynamiques comme js, copier des objets est un casse-tête. J'en ai écrit un simple, vous pouvez vous y référer : 🎜 rrreee 🎜Utilisez simplement la méthode clone() directement à l'extérieur. 🎜
小葫芦

Cela n'a aucun impact sur les données~

曾经蜡笔没有小新

De même, résolvez-le. . . .

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal