js引用类型变量之Function类型(二)

函数的属性和方法:

ECMAScript中的函数是对象,因此也有属性和方法,每个函数包含两个属性和方法:length和prototype.其中,length属性表示函数希望接受的参数的个数举个例子;

function sayName(name){

alert(name);

}

 

function sum (num1,num2){

return num1+num2;

}

 

function sayHi(){

return alert("hi");

}

 

console.log(sayName.length);  //1

console.log(sum.length);       //2

console.log(sayHi.length);    //0

在ECMASCript所定义的全部属性中,prototype属性最为非一般.对于ECMAScript中的引用类型来说,prototype是保存他们所有实例方法的真正所在.换句话说,诸如toString()和valueOf()等方法实际上那个都保存在prototype名下,只不过都是通过各自的实例访问罢了.

 

每个函数都包含两个非继承而来的方法:apply()和call().两个方法的用途都是在特定的作用域中调用函数,实际上等于设置函数体内this对象的值.首先,apply()方法接受两个参数,一个是在其中运行的函数,另一个是参数数组.其中,第二个也可以是Array数组,也可以是arguments对象.举个例子;

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]);

  }

  alert(callSum1(10,10));

  alert(callSum2(10,10));

 而call方法作用和apply()方法一样,只是接受参数的方式不同而已,call()方法给函数传递的参数必须逐个列举出来.



 另外,还定义了一个方法:bind(),这个方法会创建一个函数的实例,其this的值会被绑定到传给bind()函数的值.

举个例子:window.color = "red";

  var o = {color :"blue"};

  function sayColor(){

  console.log(this.color);

  }

  var objectSayColor = sayColor.bind(o);

  objectSayColor();

 上面的例子中,sayColor()函数调用了bind(0函数并且传入对象o,创建了objectSayColor函数,objectSayColor的this的值等于o.因此,即使在全局作用域中调用这个函数,也会看到"blue".

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值