length指的是该函数所期望传递进来的参数个数。
function fun0(){} //0
function fun1(num1){} //1
function fun2(num1,num2){} //2
//prototype
function MyObject(name, size) {
this.name = name;
this.size = size;
}
var obj = new MyObject();
MyObject.prototype.color = "red";
alert(obj.color); //red
MyObject.prototype.color = "green";
alert(obj.color); //green
可以说,prototype实际上是“引用”,而非“赋值”。也就是给一个类添加一个属性或者方法,是给它添加了个引用,而非赋值一份给它。
call和apply是可以通过函数名称来调用函数
对于apply而言:
有两个参数,第一个是调用的上下文,第二个是参数数组,可以直接把arguments传递进去
对于call而言:
第一个参数是上下文对象,后面的参数是函数参数
function sum(num1,num2){return num1+num2;}
function callSum1(num1,num2){
//使用sum这个函数来完成一次调用,调用的参数就是callSum1这个函数的参数
` return sum.apply(this,arguments);
//相当于:return sum.apply(this,[num1,num2]);
}
alert(callSum1(1,2)); //3
function callSum2(num1,num2){
//call是通过参数列表来完成传递
return sum.call(this,num1,num2);
}
alert(callSum2(1,2)); //3
函数的属性length、prototype和方法call()、apply()