Js 函数构造器内置方法

对象构造器是全局对象的一个属性。当它作为构造器被调用的时候可以产生一个新的普通函数对象。当它作为函数而不是构造器被调用的时候,它也会产生一个函数对象。

new Funtion  
// 作为构造器被调用的时候可以产生一个新的普通函数对象。

Function(a, b, 'return a + b')  
// 作为函数被调用的时候,参数最后一项为函数体,前面项都是参数。

对象构造器被设计为可子类化的,当定义 class 的时侯,它可以作为 extends 语句的值。

Function.prototype.apply ( thisArg, argArray )

等效于执行内部方法 Call(func, thisArg, argList)

Function.prototype.bind ( thisArg, ...args )

等效于执行内部方法 BoundFunctionCreate(Target, thisArg, args)

Function.prototype.call ( thisArg, ...args )

等效于执行内部方法 Call(func, thisArg, argList)

分析

所以说 apply 和 call 方法完全是一样的,只是参数前者要求参数列表,后置参数需要一个一个写出来。至于 bind 的作用是改变 this 值。

Object.abc = function () {  
    return this
}.bind(this)

Object.abc()  
// window

Object.abc.name  
// "bound"
// bind 绑定的函数名都会被加上字符串 bound

Object.abc = function aaa() {  
    return this
}.bind(this)

Object.abc.name  
// "aaa bound"

Object.abc = function (a, b) {  
    return a + b
}.bind(this, 1, 2)

Object.abc()  
// 3

Object.abc(2, 2)  
// 3
// 参数已被绑定