函数属性与方法

1.ECMAScript 中的函数是对象,因此有属性和方法。每个函数都有两个属性:length
和 prototype。其中,length 属性保存函数定义的命名参数的个数。
在这里插入图片描述

2.以上代码定义了 3 个函数,每个函数的命名参数个数都不一样。
3.sayName()函数有 1 个命名参数,所以其 length 属性为 1。
4.类似地,sum()函数有两个命名参数,所以其 length 属性是 2。而 sayHi()没有命名参数,其 length 属性为 0。
5.prototype 属性也许是 ECMAScript 核心中最有趣的部分。
6.prototype 是保存引用类型所有实例方法的地方,这意味着 toString()、valueOf()等方法实际上都保存在 prototype 上,进而由所有实例共享。
7.这个属性在自定义类型时特别重要。(在 ECMAScript 5中,prototype 属性是不可枚举的,因此使用 for-in 循环不会返回这个属性。
8.函数还有两个方法:apply()和 call()。
9.这两个方法都会以指定的 this 值来调用函数,即会设置调用函数时函数体内 this 对象的值。
10.apply()方法接收两个参数:函数内 this 的值和一个参数数组。
11.第二个参数可以是 Array 的实例,但也可以是 arguments 对象。
12.callSum1()会调用 sum()函数,将 this 作为函数体内的 this 值(这里等于window,因为是在全局作用域中调用的)传入,同时还传入了 arguments 对象。
13.callSum2()也会调用 sum()函数,但会传入参数的数组。这两个函数都会执行并返回正确的结果。
14.call()方法与 apply()的作用一样,只是传参的形式不同。第一个参数跟 apply()一样,也是 this值,而剩下的要传给被调用函数的参数则是逐个传递的。
15.换句话说,通过 call()向函数传参时,必须将参数一个一个地列出来。
在这里插入图片描述

16.这里的 callSum()函数必须逐个地把参数传给 call()方法。结果跟 apply()的例子一样。到底是使用 apply()还是 call(),完全取决于怎么给要调用的函数传参更方便。
17.如果想直接传 arguments对象或者一个数组,那就用 apply();否则,就用 call()。
18.当然,如果不用给被调用的函数传参,则使用哪个方法都一样。
19.apply()和 call()真正强大的地方并不是给函数传参,而是控制函数调用上下文即函数体内 this值的能力。
在这里插入图片描述

20.这个例子是在之前那个关于 this 对象的例子基础上修改而成的。同样,sayColor()是一个全局函数。
21.如果在全局作用域中调用它,那么会显示"red"。这是因为 this.color 会求值为 window.color。
22.如果在全局作用域中显式调用 sayColor.call(this)或者 sayColor.call(window),则同样都会显示"red"。
23.而在使用 sayColor.call(o)把函数的执行上下文即 this 切换为对象 o 之后,结果就变成了显示"blue"了。
24.使用 call()或 apply()的好处是可以将任意对象设置为任意函数的作用域,这样对象可以不用关心方法。
25.在前面例子最初的版本中,为切换上下文需要先把 sayColor()直接赋值为 o 的属性,然后再调用。而在这个修改后的版本中,就不需要这一步操作了。
26.ECMAScript 5 出于同样的目的定义了一个新方法:bind()。
27.bind()方法会创建一个新的函数实例,其 this 值会被绑定到传给 bind()的对象。
28.这里,在 sayColor()上调用 bind()并传入对象 o 创建了一个新函数 objectSayColor()。
29.objectSayColor()中的 this 值被设置为 o,因此直接调用这个函数,即使是在全局作用域中调用,也会返回字符串"blue"。
30.对函数而言,继承的方法 toLocaleString()和 toString()始终返回函数的代码。返回代码的具体格式因浏览器而异。
31.有的返回源代码,包含注释,而有的只返回代码的内部形式,会删除注释,甚至代码可能被解释器修改过。
32.由于这些差异,因此不能在重要功能中依赖这些方法返回的值,而只应在调试中使用它们。
33.继承的方法 valueOf()返回函数本身。

这是我所学到的Models引用步骤,所以我要分享给你们,希望可以帮助到你们。
以上就是我的分享,新手上道,请多多指教。如果有更好的方法或不懂得地方欢迎在评论区教导和提问喔!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值