js 点滴
1 方法的外部属性
var test=function(num1,num2,num3){
alert(num1+num2);
}
alert(test.length);//方法的属性lenght:形参的个数
2 this
函数的作用域
3 call aply
function each(arr,func){
if(arr instanceof Array){
for(var i=0;i<arr.length;i++){
var item=arr[i];
//通过函数对象的call/apply方法改变函数的作用域(为调用的函数的this赋值)
//func.call(item,i,item);
func.apply(item,[i,item]);//apply后面传的是数组
}
}
}
var arr=[1,2,3,4,5];
each(arr,function(index,item){
alert(this);
})
其实apply和call真正的强大用途在于,能够扩充函数赖以动作的作用域
这样扩充的最大好处就是对象不需要与方法有任何耦合关系
4 eval
eval方法可以直接调用浏览器的js引擎,直接执行传入的js代码字符串
var str="var i=0;";//eval中创建的变量就是添加到了当前eval所在的执行环境,全局执行环境下 调用eval创建变量那就添加到了window下
eval(str1);
function testEval(){
eval("var a=123;");//在方法中调用eval创建变量,那么这个变量就添加到了函数的作用域中(局部变量)
}
5
alert(object instanceof Function);//true 说明object 就是一个方法
6
function Person(){
alert("person的构造函数"+this);//此时this是new关键字创建的对象
}
var p1=new Persion();//方法名相当于类名,方法体相当于类的构造函数
7 方法的3种创建方式
1 声明式方法 :有浏览器优先级 预先创建声明式方法对象 然后才执行页面的js代码
function test(){
alert("test");
}
2 匿名变量方式 方法(非声明式)
var test2=function(){
alert("test2");
}
3 创建对象方式
var test3=new Function("x","y","alert('test3,x='+x+',y='+y);");