通过对象的get set 来实现计算属性

  1. const obj = {
  2. log: ['a', 'b', 'c'],
  3. get latest() {
  4. if (this.log.length === 0) {
  5. return undefined;
  6. }
  7. return this.log[this.log.length - 1];
  8. }
  9. };
  10. console.log(obj.latest);
  11. // expected output: "c"

计算属性是一种伪属性
删除 delete obj.latest;

如果给一个存在的对象添加计算属性 可以使用

Object.defineProperties

(看JS对象2的文章)

vm = new Vue({data: myData})
Vue是一个函数
让vm成为myData的代理
对myData的所有属性进行监控
myData变了,vm知道,然后可以调用render(data)

Vue.set

如果一个属性没有在data中定义过,那么就没法进行监听,没有办法进行响应式
解决办法:在method修改某个属性(未定义),使用Vue.set

  1. var vm = new Vue({
  2. el:'#test',
  3. data:{
  4. //data中已经存在info根属性
  5. info:{
  6. name:'小明';
  7. }
  8. }
  9. });
  10. //给info添加一个性别属性
  11. Vue.set(vm.info,'sex','男');

Vue.set和this.set
新增key
自动创建代理和监听
触发UI更新
this.$set(this.object, ‘m’, 1)

Vue.set()和this.$set()

官方响应式原理

https://cn.vuejs.org/v2/guide/reactivity.html
对于已经创建的实例,Vue 不允许动态添加根级别的响应式 property