码迷,mamicode.com
首页 > 移动开发 > 详细

javascript apply,prototype,this,argument

时间:2015-06-23 10:05:47      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:

一、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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!