Javascript学习笔记——8.2 函数调用

函数内的代码在定义时并不会执行,只有在调用时才会执行.

有四种方法可以调用函数:

  • 作为函数
  • 作为方法
  • 作为构造函数
  • 通过call()和apply()间接调用

函数调用

最普通的调用方式

方法调用

如果一个函数是一个对象的属性,这个属性就被成为方法

function sayHello(){
    console.log('hello')
}
person = {name:'mike',age:18}
person.sayHello = sayHello
person.sayHello() //hello
  • 方法调用和函数调用的一个很大区别是调用上下文(context)不同,方法调用的上下文是它所在的对象,它可以使用this引用对象.但this是关键字,不是变量或属性名,不能直接给this赋值.
function sayHello(){
    console.log(this.name+' says:"hello, I\'m '+this.age+' years old"')
}
person = {name:'Mike',age:18}
person.sayHello = sayHello
person.sayHello() //Mike says:"hello, I'm 18 years old"
  • 函数调用和其他属性一样,除了通过点来访问,还可以通过方括号来调用,而且方括号内可以是表达式,可以实现一些通过点访问无法完成的功能
function a(){console.log('method a is invoked')}
o = {}
o[3] = a
o[1+2]() // method a is invoked

方法链

当方法的返回值是一个对象,这个对象还可以调用其他方法,这种方法调用序列成为链或者级联,每次调用结果都是另一个表达式的一部分.

当方法没有返回值时,最好直接返回this,这种设计可以进行链式调用的风格编程.

point.setX(x).setY(y).setZ(z) //给三位空间的一个点设计坐标

不要将方法的链式调用和构造函数的链式调用混淆.

如果方法中有嵌套函数,嵌套函数不能从这个方法中访问this,嵌套函数的this还是全局对象.如果需要访问对象,在方法中使用一个变量存储this,再在嵌套函数中使用这个变量.

var o ={
    m:function(){
        var self = this //将this保存到变量中
        console.log(this === o) //true 方法中this即为对象
        f()
        function f(){
            console.log(this === o) //false 嵌套函数中,this不是当前对象
            console.log(self === o) //true
        }
    }
}

构造函数

如果函数调用前有关机子new,它就构成构造函数的调用.构造函数调用和普通调用在实参处理 调用上下文和返回值方面都不同

  • 没有参数可以省略括号var o = new Object
  • 构造函数会新创建一个对象并以这个对象作为其上下文,可以使用this引用这个新创建的对象
  • 构造函数一般没有return, 构造函数会隐式返回这个新对象的值.

间接调用

在javascript中, 函数也是对象, 它也有自己的方法. 其中的call()和apply()可以用来间接调用函数.

你可能感兴趣的:(Javascript学习笔记——8.2 函数调用)