您的位置:首页 > Web前端 > JavaScript

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

2012-02-03 11:10 609 查看
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上






内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: