콘솔의 This.source[this.schema_key]는 다음과 같습니다
으아악이러한 데이터를 직접 얻을 수 있는 방법이 있나요
으아악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()
메소드를 사용하세요. 🎜