开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 10 天,点击查看活动详情
get 和 defineProperty 有什么区别
除非你使用类,否则两者都有相似的结果。如果您使用get该属性将在对象的原型上定义,而使用Object.defineProperty()该属性将在它所应用的实例上定义。
Getters和Setters有什么优点
以下是 Getters 和 Setters 的好处列表,
- 它们提供更简单的语法
- 它们用于定义计算属性或 JS 中的访问器。
- 有助于提供属性和方法之间的等价关系
- 他们可以提供更好的数据质量
- 对于使用封装逻辑在幕后做事很有用。
我可以使用 defineProperty 方法添加 getter 和 setter
是的,您可以使用该Object.defineProperty()方法添加 Getters 和 Setters。例如,下面的计数器对象使用递增、递减、加减属性,
var obj = { counter: 0 };
// Define getters
Object.defineProperty(obj, "increment", {
get: function () {
this.counter++;
},
});
Object.defineProperty(obj, "decrement", {
get: function () {
this.counter--;
},
});
// Define setters
Object.defineProperty(obj, "add", {
set: function (value) {
this.counter += value;
},
});
Object.defineProperty(obj, "subtract", {
set: function (value) {
this.counter -= value;
},
});
obj.add = 10;
obj.subtract = 5;
console.log(obj.increment); //6
console.log(obj.decrement); //5
什么是 compose 和 pipe 函数?
“compose”和“pipe”是函数式编程中常用的两种技术,用于简化复杂的操作并使代码更具可读性。它们在 JavaScript 和高阶函数中不是原生的。从右到左将任意数量的compose()函数应用于前一个函数的输出。
什么是可选链?
根据 MDN 官方文档,可选的链接运算符 (?.) 允许读取位于连接对象链深处的属性值,而无需明确验证链中的每个引用是否有效。
这 ?。运算符就像 . 链接运算符,除了如果引用为空(null 或 undefined)时不会导致错误,表达式会短路并返回 undefined 值。与函数调用一起使用时,如果给定函数不存在,则返回 undefined。
const adventurer = {
name: 'Alice',
cat: {
name: 'Dinah'
}
};
const dogName = adventurer.dog?.name;
console.log(dogName);
// expected output: undefined
console.log(adventurer.someNonExistentMethod?.());
// expected output: undefined
setTimeout、setImmediate 和 process.nextTick 之间有什么区别?
- 设置超时: setTimeout() 是在 delay 毫秒后安排执行一次性回调。
- Set Immediate: setImmediate 函数用于在当前事件循环完成后立即执行一个函数。
- Process NextTick: 如果在给定阶段调用 process.nextTick(),则在事件循环继续之前,传递给 process.nextTick() 的所有回调将被解析。如果递归调用 process.nextTick() ,这将阻止事件循环并创建 I/O 饥饿。
什么是可观察
Observable 基本上是一个函数,可以随着时间的推移同步或异步地向观察者返回值流。消费者可以通过调用subscribe()方法获取值。让我们看一个 Observable 的简单例子
import { Observable } from "rxjs";
const observable = new Observable((observer) => {
setTimeout(() => {
observer.next("Message from a Observable!");
}, 3000);
});
observable.subscribe((value) => console.log(value));
注意: Observables 还不是 JavaScript 语言的一部分,但正在提议将它们添加到该语言中