深入浅出Vue中为什么不能检测数组变化

Object.defineProperty了解一下

    可以理解为给属性定义属性的方法

    具体例子


这里我们给book添加了name,和page二个属性,通过属性给其设置值和取值的时候会调用我们定义的set,get方法。

Vue中就是靠这个方法给每一个对象嵌套般的加了get,set方法,并且要达到响应式,要求是对象上已定已的属性,后期添加的不算,但是可以通过Vue.set这个全局方法给其添加,因为当初定义的都可以使用这个方法添加上,但是你后添加的属性并没有执行这个方法,所以无法实现响应式,基于此,我们可以类比数组, 比如一个数组 var arr = [1,2,3] 这时候可以认为arr的数组索引是他们的属性,arr[index]是能取到值的,想当于属性去访问值,因此我们可以认为0,1,2是arr的属性,如果是在vue中,可以认为Vue给0,1,2添加了get,set方法,但是比如我们给arr[3]=3,这时候3这个(属性)下标被赋值了一个3,想当于添加了一个属性,但是不要忘了,这是后添加的,因此vue给数组都实现了怪异方法实现响应式(具体可见官网介绍)。

js每日tips

    1.非Object的原型对象.__proto__指向Object.prototype 而Object.prototype.__proto__=null

    2.所有的构造函数 Function Object Date Array Regxp 等等其他内置函数的__proto__ 都是Function.prototype

    3.一般来说被new出来的对象三步到头==》null

        eg: function Person(){ this.name =name}

            var p1 = new Person()

            p1.__proto__=Person.prototype

            p1.__proto__.__proto__=Object.prototype

            p1.__proto__.__proto__.__proto__=null

    而构造函数 Person

    Person.__proto__=Function.prototype

   Person.__proto__.__proto__=Obejct.prototype

Person.__proto__.__proto__.__proto__=null

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Address:https://www.zybuluo.com/XiangZhou/note/208532 Exp...
    天蠍蒗漫阅读 13,900评论 2 55
  • 凍筍出土中,味醇而滑,肥而不滓,蓋所謂純氣之守也。 入春未十日,而筍理蘇硬,食後猶存齒頰間,豈化之漓也。出胎稚子,...
    古阳阅读 1,924评论 0 0
  • 有些人,一转身就是一辈子。 曾经你遇到了某个人,你以为那就是一生。 你想象过无数种未来、幻想了无数种以后, 曾经你...
    家乡的风物百科阅读 4,556评论 0 1
  • 新年的第一天就过的有些凌乱,晨读沟通,但不知是否触动到某些情绪,头脑里有被卡住的感觉,然后与时尚芭莎的人聊,然后头...
    jenjenzhong阅读 1,020评论 0 0