JavaScript中函数的属性和方法(length、prototype、apply()、call()和bind())

函数内部属性

在函数内部有两个特殊的对象:arguments 和 this 。
arguments 的主要用途是用来保存函数参数,但这个对象还有一个名叫 callee 的属性,该属性是一个指针,指向拥有这个 arguments 对象的函数。
this 与 Java 中的 this 大致类似,引用的是函数执行的环境对象。

函数属性和方法

1. length

length 属性表示函数希望接受的命名参数的个数

2. prototype

诸如 toString ( ) 和 valueOf ( ) 等方法实际上都保存在 prototype 名下。
prototype 属性是不可枚举的,因此 for-in 无法发现。

3. apply ( ) 和 call ( )

每个函数都包含这两个非继承而来的方法。
这两个方法的用途都是在特定作用域中调用函数,实际上等于设置函数体内 this 对象的值。

apply ( )

apply ( ) 方法接收两个参数:一个是在其中运行函数的作用域,另一个是参数数组。其中,第二个参数可以是 Array 的实例,也可以是 arguments 对象。例如:

function callSum(num1, num2) {
	return sum.call(this, [num1, num2])
}
call ( )

call ( ) 方法与 apply ( ) 的方法作用相同,他们的区别在于接收参数的方式不同。对于 call ( ) 方法而言,第一个参数是 this 值没有区别,但是其余参数都直接传递给函数,也就是要将函数的参数逐个列举出来。例如:

function callSum(num1, num2) {
	return sum.call(this, num1, num2)
}

事实上,传递参数并非这两个方法的真正用武之地;他们真正强大的地方是能够扩充函数赖以运行的作用域。

	window.color = "red"
    var o = {color: "blue"}

    function sayColor(){
        alert(this.color)
    }

    sayColor()		// red
    sayColor.call(this)	// red
    sayColor.call(window)	// red
    sayColor.call(o)	// blue

4. bind ( )

这个方法会创建一个函数的实例,其 this 值会被绑定到传给 bind ( ) 函数的值。例如:

	window.color = "red"
    var o = {color: "blue"}

    function sayColor(){
        alert(this.color)
    }

    var objectSayColor = sayColor.bind(o)
    objectSayColor()	// blue
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值