banner
banner
banner
NEWS LETTER

TS-函数和this

Scroll down

函数

  • 函数类型:创建有名字的函数和匿名函数

    • 具名函数:function add(x,y) { return x+y }
    • 匿名函数:const ada = function(x,y){ return x+y }
  • 完整的函数类型

    • 定义一个变量:(形参:参数类型) => 返回类型 = 函数(形参:参数类型):返回类型{}
    • 示例:let add: (x:number,y:number) => number == function(x:number,y:number):number{return x+y}
  • 推断类型: ts编译器会自动识别出类型

  • 可选和默认参数

    • ts规定,形参个数和传参个数要一致
    • 可选必须放在必选后面,没传默认为undefined
    • 没传或传undefined时叫默认初始值。带默认值的参数为可选,位置随意
    • 可选参数与末尾的默认参数共享参数类型
  • 剩余参数:个数不限的可选参数

1
2
3
function buildName(firstName: string, ...restOfName: string[]) {
return firstName + " " + restOfName.join(" ")
}

this

call方法

  1. 从参数1到末尾创建参数列表
  2. call方法的参数一是this值,其余的参数是调用函数的形参
    1
    2
    3
    4
    function hello(thing) {
    console.log(this + " says hello " + thing)
    }
    hello.call("Yehuda", "world") // Yehuda says hello world

this和箭头函数

  • 在js中,顶级的非方法式调用会将this视为window
  • 注意:在严格模式下,this为undefined而不是window
  • 解决方法:使用箭头函数,在函数被返回时就绑好正确的this,箭头函数能保存函数创建时的 this值,而不是调用时的值
  • ts中设置–noImplicitThis标记。它会指出里的this的类型

this参数:是假的参数(形式:function f(this: void) {})

回调函数里的this参数

  • 显式指定this类型,函数要带有this:void。但只能这个实例里的这个函数可用。
  • 用箭头函数,它不会捕获this,实例里的this都指向一个。但每个对象都会创建一次。

重载

  • 同一个函数提供多个函数类型定义来进行函数重载
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    let suits = ["hearts", "spades", "clubs", "diamonds"]
    // 接收对象数组,并返回数字类型
    function pickCard(x: {suit: string; card: number}[]): number
    // 接收数字,并返回一个对象类型
    function pickCard(x: number): {suit: string; card: number}
    function pickCard(x): any {
    // typeof检测非undefined,string,number,boolean之外,都只会返回object
    if (typeof x == "object") { // 传对象数组进入这个判断
    let pickedCard = Math.floor(Math.random() * x.length)
    return pickedCard
    } else if (typeof x == "number") { // 传数字进入这个判断
    let pickedSuit = Math.floor(x / 13)
    return { suit: suits[pickedSuit], card: x % 13 }
    }
    }

    let myDeck = [{
    suit: "diamonds", card: 2
    }, {
    suit: "spades", card: 10
    }, {
    suit: "hearts", card: 4}] // 定义一组数据
    let pickedCard1 = myDeck[pickCard(myDeck)] // 传值
    let pickedCard2 = pickCard(15)
其他文章
cover
TS-泛型 <>
  • 24/11/01
  • 11:40
  • TypeScript
cover
TS-模块解析
  • 24/11/01
  • 11:40
  • TypeScript
目录导航 置顶
  1. 1. 函数
    1. 1.1. 函数类型:创建有名字的函数和匿名函数
    2. 1.2. 完整的函数类型
    3. 1.3. 推断类型: ts编译器会自动识别出类型
    4. 1.4. 可选和默认参数
    5. 1.5. 剩余参数:个数不限的可选参数
  2. 2. this
    1. 2.1. call方法
    2. 2.2. this和箭头函数
    3. 2.3. this参数:是假的参数(形式:function f(this: void) {})
    4. 2.4. 回调函数里的this参数
    5. 2.5. 重载
请输入关键词进行搜索