标签:
一、apply介绍
1、apply是前端javascript方法默认自带的方法,这要的用法是替换掉当前执行的方法的this对象,从而实现继承,或者修改方法内部使用到this对象;
这次先说继承:
例如:
首先,在test方法里边声明两个方法,add,sub:
function test(){
this.add=function(a,b){
return a+b;
}
this.sub=function(a,b){
return a-b;
}
}
然后,我们接着定义一个方法test2:
function test2(){
test.apply(this);
}
接着,我们生成实例t2,实例化过程中test2成为t2的构造函数,此时test2方法里头的this对象是指t2的;
var t2=new test2();
那么现在,我们可以测试t2:
t2.add(2,1);
t2.sub(3,2);
结果是不是很神奇。
2、apply有一个重要的特性就是改变当前执行的方法的this对象;
例如:
<input type=‘file‘ id=‘test‘/>
首先我们定义一个检测文件后缀名的方法,此时的this对象是指向window,我们看下边的两个测试例子:
function checkFileType(){
var _value=this.value;
var pattern=/\.[a-zA-Z]$/;
var result=pattern.exec(_value);
if(result!=null)
console.log(result);
else
console.log(‘not find‘);
}
那么现在我们就使用apply:
$("#test").click(function(){
checkFileType();
});
$("#test").click(function(){
checkFileType.apply(this);
});
此时我们会发现,第一个打出的是not find,第二个正确的打印出了附件后缀名。
到此就介绍完了apply两个核心用法,继承与改变当前执行方法的this对象。
二、prototype特性
prototype是前端方法默认自带的属性,主要的用处是在实例之间共享方法;例如:
function test(){};
test.prototype.add=function(a,b){
return a+b;
}
test.prototype.sub=function(a,b){
return a-b;
}
var t1=new test();
var t2=new test();
t1.add(2,1);
t2.add(3,2);
t1.sub(2,1);
t2.sub(3,2);
从上面的例子,我们可以看到t1,t2两个实例都可以调用到add,sub这两个方法;
三、this对象
由于javascript是解释型语言,所以this只有在执行中才能确定。
在实践中我们可以总结出this的规律,this指向当前方法所属的实例:
1、例如:function test(){
console.log(this);}
test();
此时我们发现this指向window,因为test()是定义在window里边的方法,即我们可以这样调用window.test(),也就是说test是window的方法。
2、test.prototype.add=function(){
console.log(this);}
var tt=new test();
tt.add();
此时,我们定义了一个实例tt,add是实例tt的一个方法,我们会发现this指向tt。
3、结合juqery使用
我们常常见到:$("#xx").click(function(){
console.log(this);
});
此时this是指向("#xx")实例的,有兴趣可以抽出源代码看看()是jquery的一个工厂方法,返回的是一个实例。
上面的例子,click方法属于("#xx")实例的因此,click内部的this指向("#xx")。当click调用回掉方法时,会使用fn.apply(this),因此我们在回掉方法打印出来的this是指向$("#xx")的。
四、arguments
在javascript里边arguments是一个数组,用来接收当前方法传入的参数。
javascript apply,prototype,this,argument
标签:
原文地址:http://www.cnblogs.com/hhxx123/p/4594718.html