有一个app,如下:
var app = new Vue({
el:'#app',
data:{
name:'zhangsan'
}
});
var d = app.data;
d.name = 'lisi' //如何让这儿更改不影响app.data中的数据?
有一个app,如下:
var app = new Vue({
el:'#app',
data:{
name:'zhangsan'
}
});
var d = app.data;
d.name = 'lisi' //如何让这儿更改不影响app.data中的数据?
Vue数据响应式的原理是 Object.defineProperty 用get和set劫持其他人对 对象属性的访问
然后vue自己写的set里面,实现了(ˇˍˇ) 想向所有需要这个属性的对象,发送这个属性最新的值
只要修改了 属性的值 就会调用 set 方法,然后其他对象就知道数据改变,然后重新渲染
相关代码
var a = {
n: 12,
m: 'asd'
}
Object.defineProperty(a, 'm', {
get: function(){
console.log('触发了 getter');
return 'asd';
},
set: function(value){
console.log('触发了 setter');
m = value;
}
});
var obj = {
foo: 'bar'
}
Object.freeze(obj)
new Vue({
el: '#app',
data: obj
})
5 回答4.9k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答4.8k 阅读✓ 已解决
4 回答4.4k 阅读✓ 已解决
4 回答1.9k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
深考贝,
JSON.parse(JSON.stringify(app.data));