Skip to main content

函数

rest操作符#

rest 操作符可以用于创建有一个变量来接受多个参数的函数。 这些参数被储存在一个可以在函数内部读取的数组中。

function run(...peoples){    //表示不知道有多少个元素的  for(i in peoples){    console.log(peoples[i]);      }}
run('xiaoyu','haha',{name:'xi',age:22})

getter 和 setter#

你可以从对象中获得一个值,也可以给对象的属性赋值。

这些操作通常被称为 getters 以及 setters。

Getter 函数的作用是可以让对象返回一个私有变量,而不需要直接去访问私有变量。

Setter 函数的作用是可以基于传进的参数来修改对象中私有变量。 这些修改可以是计算,或者是直接替换之前的值。

class Book {  constructor(author) {    this._author = author;  }  // getter  get writer() {    return this._author;  }  // setter  set writer(updatedAuthor) {    this._author = updatedAuthor;  }}const novel = new Book('anonymous');console.log(novel.writer);novel.writer = 'newAuthor';console.log(novel.writer);

控制台将显示字符串 anonymousnewAuthor

请注意用于调用 getter 和 setter 的语法。 它们甚至看起来不像是函数。 getter 和 setter 非常重要,因为它们隐藏了内部的实现细节。

注意: 通常会在私有变量前添加下划线(_)。 然而,这种做法本身并不是将变量变成私有的。

promise#

Promise 是异步编程的一种解决方案 - 它在未来的某时会生成一个值。 任务完成,分执行成功和执行失败两种情况。 Promise 是构造器函数,需要通过 new 关键字来创建。 构造器参数是一个函数,该函数有两个参数 - resolvereject。 通过它们来判断 promise 的执行结果。 用法如下:

const myPromise = new Promise((resolve, reject) => {
});

Promise 有三个状态:pendingfulfilledrejected。 上一个挑战里创建的 promise 一直阻塞在 pending 状态里,因为没有调用 promise 的完成方法。 Promise 提供的 resolvereject 参数就是用来结束 promise 的。 Promise 成功时调用 resolve,promise 执行失败时调用 reject, 如下文所述,这些方法需要有一个参数。

const myPromise = new Promise((resolve, reject) => {  if(condition here) {    resolve("Promise was fulfilled");  } else {    reject("Promise was rejected");  }});

上面的示例使用字符串作为这些函数的参数,但参数实际上可以是任何格式。 通常,它可能是一个包含数据的对象,你可以将它放在网站或其他地方。

用 then 处理 Promise 完成的情况

当程序需要花费未知的时间才能完成时(比如一些异步操作),一般是服务器请求,promise 很有用。 服务器请求会花费一些时间,当结束时,需要根据服务器的响应执行一些操作。 这可以用 then 方法来实现, 当 promise 完成 resolve 时会触发 then 方法。 例子如下:

myPromise.then(result => {
});

result 即传入 resolve 方法的参数。

使用 catch 处理 Promise 失败的情况

当 promise 失败时会调用 catch 方法。 当 promise 的 reject 方法执行时会直接调用。 用法如下:

myPromise.catch(error => {
});

error 是传入 reject 方法的参数。