最近开始尝试理解 vue 实现 mvvm 实时响应的原理,有一个地方不理解,抽离出来的代码模型如下:
let data={
name:"张三",
add:'山东',
}
const keys=Object.keys(data)
// 方案一
const obs=new function (obj){
keys.forEach((k)=>{
Object.defineProperty(this,k,{
get(){
return obj[k]
},
set(val){
console.log(`${k}被改了,我要去解析模板.....`)
obj[k]=val
}
})
})
}(data)
// 方案二
// const obs ={}
// keys.forEach((k)=>{
// Object.defineProperty(obs,k,{
// get(){
// return data[k]
// },
// set(val){
// console.log(`${k}被改了,我要去解析模板.....`)
// data[k]=val
// }
// })
// })
const vm={}
vm._data=data=obs
其中,方案二会产生溢出我能理解,vm._data=data=obs 后vm._data 和 data 就指向了同一个对象,当读取该对象的一个属性时会调用其set,set中return又要重新读取这个属性无限循环导致溢出。
但是为什么方案一(源码中抽离出来的模型),就不会产生这个问题?它和方案二的区别不就是使用new 函数创建的对象吗?但是最后也赋值给 vm._data 和 data 了,为什么就可以避免溢出呢?
单看一次执行,这两个写法都是正确的;
但是如果第二次执行,data 会被修改掉
`
let data = {}
// 省略上诉代码
// 在初始化下一个组件时候
data = {
}
`
此时之前的defineProperty
在 set 时候,改的是新值。
这地方其实就是多了个函数立即执行,创造一个闭包而已。
问题内容: 我已经在C中实现了一些排序算法(用于对整数进行排序),并谨慎地用于存储与数据大小有关的任何内容(因此还包括了计数器和填充物),因为该算法也应使用数千兆字节的数据集进行测试整数 这些算法应该很好,并且分配的数据量应该没有问题:数据存储在文件中,并且每次仅加载很少的块,即使将内存中的缓冲区阻塞为任意大小,也可以正常工作。 使用数据集最多4千兆字节(因此16GB数据)的测试可以正常工作(排序
问题内容: 我想用datatyp uint8添加numpy数组。我知道这些数组中的值可能足够大,以至于发生溢出。所以我得到类似: 现在,a是。但是,我希望让uint8太大的值成为uint8允许的最大值,而不是溢出。所以我想要的结果是。 我可以使用以下代码获得此结果: 问题是我的数组很大,因此创建具有更大数据类型的第三个数组可能是内存问题。是否有一种快速且更节省内存的方式来实现上述结果? 问题答案:
可以直接把下面代码拷贝到调试窗口运行: 其中 test 输出有 2 次: 问题,执行 2 次的原理是设么呢?问过 GPT-4o,给出答案是这样的: 第一次 apply 调用:代理对象的 apply 方法被触发。 第二次 apply 调用:代理对象内部调用了 thisArgs.querySelector.apply(document, args);,即调用 document.querySelecto
问题内容: 在阅读有关如何避免json劫持的文章时,我遇到了各种方法,包括发布所有内容或添加响应,因此它们不是有效的JavaScript。 最常见的前缀方法似乎是在对象或数组之前添加。Angular建议以开头。 为什么角度不使用更标准的方法?一个人不是完全安全吗?在JavaScript中难于使用吗?抛开角度,是否有充分的理由采用不太受欢迎的方法? 问题答案: 阻止将JSON响应解析为JavaScr
本文向大家介绍详解实现vue的数据响应式原理,包括了详解实现vue的数据响应式原理的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要是给不了解或者没接触过 vue 响应式源码的小伙伴们看的,其主要目的在于能对 vue 的响应式原理有个基本的认识和了解,如果在面试中被问到此类问题,能够知道面试官想让你回答的是什么?「PS:文中如有不对的地方,欢迎小伙伴们指正」 响应式的理解 响应式顾名思义就是数
问题内容: 我使用Java在Selenium WebDriver中编写了一些测试用例,并在网格(集线器和多个节点)上执行它们。我注意到有一些测试案例由于导致失败。避免并确保始终找到该元素的最佳且可靠的方法是什么? 问题答案: 您永远无法确定会找到该元素,实际上这是功能测试的目的- 告诉您页面上是否有任何更改。但有一两件事肯定是有帮助是添加等待这往往导致元素像