持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第35天,点击查看活动详情
目录
今日题
插入排序
分析
数据排序是js算法中一个非常基础的知识, 冒泡和快排是更为人所熟知,今天就来绍一种另外的排序算法——插入排序。 插入排序的原理是新建一个新的数组。之后将数组中的数据与新数组中的数据比较,根据数据的大小决定插入的位置。 与冒泡相比,空间复杂度相仿,但时间复杂度无疑更小。
昨日题
监听对象
实现一个watch
函数,该函数默认监听要监听的对象下面的value
属性 作用:
const a = {
value: 20
}
// 第一个参数:要监听的对象, 第二个参数:发生变化要触发的函数,触发的函数有俩参数:前一个值和新的值
watch(a, (oldValue, newValue) => {
console.log(`属性发生变化, 原值:${oldValue}, 新值:${newValue}`);
})
a.value = 20 // 触发监听函数
答案
//第一种
let obj = {
value:10
}
Object.defineProperty(obj, "value", {
get() {
console.log("数据被拿取了")
return value;
},
set(newValue) {
console.log("数据被修改了")
value = newValue;
}
})
console.log(obj.value); // "10"
obj.value = "20";
//第二种
let obj={
_value:10,
set value(newValue){
console.log("数据被修改了")
this._value=newValue
},
get value(){
console.log("数据被拿去了")
return this._value
}
}
console.log(obj.value)
obj.value=20
console.log(obj.value)
解析
set和get是js中提供的两种API,set用来修改对象的数据get用来拿取对象的数据。 Js中完成setter和getter的设计模式有两种方法。 一种是通过Object.defineProperty函数,该函数会直接在一个对象上定一个新属性或者修改一对象的现有属性,并返回此对象。 我们给对象的数据添加set和get方法,这样就可以做到通过get取值和根据set修改值。 第二种方法是在声明时给函数加上set和get前缀,这样解释器也会通过set方法和get方法来拿取修改值
结语
此文章已收录至《JavaScript每日一题》专栏,如果你对本专栏有任何建议,欢迎反馈。如果你对此文章中的题目还有不懂的地方,那么请在评论区留言与大家一起讨论吧。创作不易,少年,就请留个赞再走吧!