js对象学习笔记-Function类型和对象

1.构造函数

任何函数,只要通过new操作符来调用,那它就可以作为构造函数;而任何函数,入股不通过new操作符来调用,那它跟普通的函数一样。

function Person(name){
this.name = name;
this.sayName = function(){
alert(this.name);
}
}

//当作构造函数
var person = new Person("zhangsan");
person.sayName(); //zhangsan

//当作普通函数
Person("zhangsan"); //在全局作用域中调用一个函数时,this对象总是指向Global对象(在浏览器中就是window对象)
window.sayName(); //zhangsan

 2.函数的内部属性:arguments和this

   arguments:数组类型,包含传入函数中的所有参数。arguments含一个特殊属性callee,该属性是一个指针,指向拥有这个arguments对象的函数,如下面例子:

function factorial(num){
if(num<=1){
return 1;
}else{
return num* factorial(num-1);
}
}

//使用arguments的callee属性
function factorial(num){
if(num<=1){
return 1;
}else{
return num* arguments.callee(num-1); //arguments.callee 等效于拥有arguments的函数factorial
}
}

   this:指向函数执行时所处的作用域,参考如下例子:

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

function sayColor(){ //在全局作用域中定义
alert(this.color);
}
sayColor(); //red,因为在全局作用域中使用sayColor(),所以this指向全局对象window

//以下方法还可以参考使用apply()和call()来限定函数执行的作用域
o.sayColor = sayColor; //把全局函数sayColor赋值给对象o
o.sayColor(); //blue,因为在o对象中使用sayColor,所以this指向o

3.每个函数都包含的两个非继承方法:apply()和call()

先看看这两个方法是使用例子:

用途一:传递参数
function sum(a,b){
return a+b;
}
//apply使用
function callSum1(num1,num2){
return sum.apply(this,arguments); //arguments包含传入函数的参数
}
function callSum2(num1,num2){
return sum.apply(this,[num1,num2]);
}

//call使用,apply传入的参数是一个数组,而call则是一个个具体参数
function callSum3(num1,num2){
return sum.call(this,num1,num2);
}

用途二:扩充函数运行的作用域
call用例(apply类似)
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,因为作用域在o上






 

posted @ 2012-02-03 11:10  keenhome  阅读(250)  评论(0编辑  收藏  举报