# 函数
# 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() {}()