JS基础之函数内部对象、属性、方法
2018-01-14 18:09
746 查看
在函数内部,有2个特殊的对象:arguments 和 this。
· arguments:类数组对象,包含着传入函数中的所有参数。
>这个对象还有一个名叫callee属性,指向拥有这个arguments对象的函数。---经常用于递归
>另一个函数对象的属性,caller,保存着调用当前函数的函数的引用,如果是在全局作用域中调用当前函数,它的值为null
· this:引用的是函数执行的环境对象——或者也可以说是this值(当在网页的全局作用域中调用函数时,this对象引用的就是window)
每个函数都包含2个属性:length、prototype。
· length:表示函数希望接收的命名参数的个数。
· prototype:对于ES中的引用类型来说,prototype是保存他们的实例方法的真正所在。
>在ES5中,prototype属性是不可枚举的,因此使用for-in无法发现。
每个函数都包含2个非继承而来的方法
· apply()/call():这2个方法的用途都是在特定的作用域中调用函数,实际上等于设置函数体内this对象的值。
>apply():接收2个参数,一个是在其中运行函数的作用域,另一个是参数数组。(第2个参数可以是Array的实例,也可以是arguments对象)
>call():第2个参数,传递给函数的参数必须逐个列举出来。
>事实上,传递参数并非apply()、call()真正的用武之地,他们真正强大的地方是能够扩充函数赖以运行的作用域。(最大好处就是对象不需要与方法有任何耦合关系)
E5还定义了一个方法:bind(),这个方法会创建一个函数的实例,其this值会被绑定到传给bind()函数的值。
PS:每个函数继承的toLocaleString()和toString()始终都返回函数的代码,返回代码的格式则因浏览器而异,有的返回的代码与源代码中的函数代码一样,而有的则返回函数代码的内部表示,即由解析器删除了注释并对某些代码作了改动后的代码。由于存在这些差异,我们无法根据这2个方法返回的结果来实现任何重要功能。不过,这些信息在调试代码时倒是很有用。另外一个继承的valueOf()同样也只返回函数代码。
· arguments:类数组对象,包含着传入函数中的所有参数。
>这个对象还有一个名叫callee属性,指向拥有这个arguments对象的函数。---经常用于递归
>另一个函数对象的属性,caller,保存着调用当前函数的函数的引用,如果是在全局作用域中调用当前函数,它的值为null
· this:引用的是函数执行的环境对象——或者也可以说是this值(当在网页的全局作用域中调用函数时,this对象引用的就是window)
每个函数都包含2个属性:length、prototype。
· length:表示函数希望接收的命名参数的个数。
function sayName(name) { console.log(name); } function sum(num1,num2){ console.log(num1+num2); } function sayHi(){ console.log("hi"); } console.log(sayName.length); //1 console.log(sum.length); //2 console.log(sayHi.length); //0
· prototype:对于ES中的引用类型来说,prototype是保存他们的实例方法的真正所在。
>在ES5中,prototype属性是不可枚举的,因此使用for-in无法发现。
每个函数都包含2个非继承而来的方法
· apply()/call():这2个方法的用途都是在特定的作用域中调用函数,实际上等于设置函数体内this对象的值。
>apply():接收2个参数,一个是在其中运行函数的作用域,另一个是参数数组。(第2个参数可以是Array的实例,也可以是arguments对象)
>call():第2个参数,传递给函数的参数必须逐个列举出来。
function sum(num1,num2){ return num1 + num2; } function callSum1(num1,num2) { return sum.apply(this,arguments); } function callSum2(num1,num2){ return sum.apply(this,[num1,num2]); } console.log(callSum1(10,10)); //20 console.log(callSum2(10,10)); //20 function callSum3(num1,num2){ return sum.call(this,num1,num2); } console.log(callSum3(10,10)); //20
>事实上,传递参数并非apply()、call()真正的用武之地,他们真正强大的地方是能够扩充函数赖以运行的作用域。(最大好处就是对象不需要与方法有任何耦合关系)
window.color = "red"; var o = {color:"blue"}; function sayColor(){ console.log(this.color); } sayColor(); //red sayColor.call(this); //red sayColor.call(window);//red sayColor.call(o); //blue
E5还定义了一个方法:bind(),这个方法会创建一个函数的实例,其this值会被绑定到传给bind()函数的值。
window.color = "red"; var o = {color:"blue"}; function sayColor(){ console.log(this.color); } var objectSayColor = sayColor.bind(o); objectSayColor(); //blue,objectSayColor()函数的this值等于o,因此即使是在全局作用域中调用这个函数,也会看到"blue"
PS:每个函数继承的toLocaleString()和toString()始终都返回函数的代码,返回代码的格式则因浏览器而异,有的返回的代码与源代码中的函数代码一样,而有的则返回函数代码的内部表示,即由解析器删除了注释并对某些代码作了改动后的代码。由于存在这些差异,我们无法根据这2个方法返回的结果来实现任何重要功能。不过,这些信息在调试代码时倒是很有用。另外一个继承的valueOf()同样也只返回函数代码。
相关文章推荐
- js 获取函数的所有参数和遍历JavaScript某个对象所有的属性名称和值的方法
- JavaScript基础(基本语法:变量、语句、数组、函数、对象、全局方法以及js与java不同,js与html关联)
- 【JS--基础--对象】--基础用法(通用的Object属性和方法)
- js基础之DOM中document对象的常用属性方法详解
- js基础之DOM中document对象的常用属性方法
- 显示js对象所有属性和方法的函数
- 显示js对象所有属性和方法的函数
- js基础之DOM中元素对象的属性方法详解
- 显示js对象所有属性和方法的函数
- JS基础之Math对象的属性和方法
- js中构造函数只是函数,函数是对象,对象可以有属性和方法
- js 获取函数的所有参数和遍历JavaScript某个对象所有的属性名称和值的方法
- js方法函数内部属性
- 161227、js显示对象所有属性和方法的函数
- 关于一些基础的js对象的属性和方法问题
- 显示js对象所有属性和方法的函数
- js 获取函数的所有参数和遍历JavaScript某个对象所有的属性名称和值的方法
- 【JS--基础--函数】--隐含参数对象arguments的callee 属性
- 显示js对象所有属性和方法的函数
- 显示js对象所有属性和方法的函数