# 函数

# apply() & call()

每个函数都有这两个非继承而来的方法。

  • apply()
函数.apply(作用域, arguments) // 参数数组
函数.apply(作用域, [num1, num2, num3])
  • call()
函数.call(作用域, num1, num2,……) // 将参数直接传给函数
  • bind() 此方法会创建一个函数实例,此函数的 this 为传给bind()的值,如:o 对象
var o = { color: 'blue' }

function sayColor() {
  console.log(this.color)
}

var objectSayColor = sayColor.bind(o)

bind()

# 实例化对象(new)的过程

function Test() {
  this.name = 'bobo'
}

var testInstance = new test()
  • new 的过程(参考资料加个人理解,待求证)
// 1. 生成一个新对象 new Object
var tmp = new Object

// 2. 将函数作用域赋给新对象,this 指向新对象,并执行函数
tmp = Test.apply(tmp, arguments)

// 3. 将新对象 [[prototype]] 指针指向函数原型
tmp.[[prototype]] = Test.prototype

// 3. 将运行结果(生成的对象)的指针,赋给实例
var testInstance = tmp

# 立即执行函数

// 这么写会报错,因为这是一个函数定义:
function() {}()

// 常见的(多了一对括号),调用匿名函数:
(function() {})()

// 但在前面加上一个布尔运算符(只多了一个感叹号),就是表达式了,将执行后面的代码,也就合法实现调用
!function() {}()
Last Updated: 5/14/2022, 11:38:45 AM