属性:length和property
length:指的是函数传入参数的个数
function sayName(name){
alert(name);
}
alert(sayName.length); //将会输出为1;
property:创建的每一个函数都有这个property属性,这个属性是一个指针,指向一个对象,而这个对象包含了可以由指定类型的所有实力共享的属性方法。在创建自定义引用类型以及实现集成时,这个属性极为重要。
function Person(){
}
Person.property.name="xx";
Person.property.sayName = function(){
alert(this.nam);
}
var person = new Person();
person.sayName(); //将会输出xx
方法:call和apply ,这两个方法主要扩充函数执行的环境(上下文)
call:必须传入等同的参数个数apply:参数一个数组
例如:
function sum(a , b){
return a+ b;
}
function callSum(a,b){
return sum.call(this,a,b); //传入的是参数
}
function applySum(a ,b){
return sum.apply(this,[a,b]); //传入的是数组 ,这里也可以是window.arguments对象
}
如果我们自定义了一个对象,想使用自定义对象里的数据,而不是window对象下的属性
window.name="win";
var obj = {
name:'obj'
}
function sayName(){
alert(this.name);
}
var say = sayName.bind(obj); //把obj对象扩充到函数的执行环境中,函数首先会找到obj.name ,然后停止找name. 如果找age ,由于obj里面没有age,那么找age路径就是从obj到//window.
say(); //将输出xx
//也可以直接使用sayName.call(obj);