JS函数与call()apply()详解
2014-11-05 11:25
537 查看
JavaScript中的每个函数都是一个对象。
因为函数都是对象,它们有自己的属性和方法。我们可以把它们看作数据(data)。
函数和方法的区别?
函数立足于它们自己(例如:alert()),
而方法是函数内部一个对象的属性(dictionary),我们通过对象来调用方法。
每个JavaScript函数都会有很多附属的(attached)方法,包括toString()、call()以及apply()。
定义了一个全局函数f()。f()通过this关键字访问变量x,
注意:我们不能通过一个对象的实例来调用这个函数。
this指向的是什么对象呢?this会指向这个全局对象。我们的变量x就是在这个全局对象中定义的。
上面的代码能够正常运行,运行结果会显示一个对话框,对话框中显示10。 第二个函数 输出100,函数内部属性
js里call函数改变对象指针,指向另一个对象调用
首先调用f()将会显示10的对话框,因为this这个时候指向的是全局对象。
然后我们调用f函数的call()方法,传入的参数是o,运行结果显示的是o中x属性的值15。
call()方法会用它的第一个参数作为f函数的this指针。也就是说,我们会告诉运行时,f函数中的this指向的是哪个对象。
call传入参数
call函数实现对象继承
c2对象可以具有了 Class对象的所有方法
apply()函数
对于apply和call两者在作用上是相同的,但两者在参数上有区别的。
对于第一个参数意义都一样,但对第二个参数:
apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,而call则作为call的参数传入(从第二个参数开始)。
如 func.call(func1,var1,var2,var3)
对应的apply写法为:func.apply(func1,[var1,var2,var3])
因为函数都是对象,它们有自己的属性和方法。我们可以把它们看作数据(data)。
函数和方法的区别?
函数立足于它们自己(例如:alert()),
而方法是函数内部一个对象的属性(dictionary),我们通过对象来调用方法。
每个JavaScript函数都会有很多附属的(attached)方法,包括toString()、call()以及apply()。
定义了一个全局函数f()。f()通过this关键字访问变量x,
var x = 10; function f(){ alert(this.x); } f(); function p(){ var x=100; alert(x); } p();
注意:我们不能通过一个对象的实例来调用这个函数。
this指向的是什么对象呢?this会指向这个全局对象。我们的变量x就是在这个全局对象中定义的。
上面的代码能够正常运行,运行结果会显示一个对话框,对话框中显示10。 第二个函数 输出100,函数内部属性
js里call函数改变对象指针,指向另一个对象调用
var x = 10; var o = { x : 15}; function f(){ alert(this.x); } f(); f.call(o);
首先调用f()将会显示10的对话框,因为this这个时候指向的是全局对象。
然后我们调用f函数的call()方法,传入的参数是o,运行结果显示的是o中x属性的值15。
call()方法会用它的第一个参数作为f函数的this指针。也就是说,我们会告诉运行时,f函数中的this指向的是哪个对象。
call传入参数
<script type="text/javascript"> var x = 10; var o = { x : 15}; function f(y){ alert(this.x); this指O对象 alert(y); } f.call(o,this.x); this指全局对象属性10 </script>
<script language="javascript"><!-- /**定义一个animal类*/ function Animal(){ this.name = "Animal"; this.showName = function(){ alert(this.name); } } /**定义一个Cat类*/ function Cat(){ this.name = "Cat"; } /**创建两个类对象*/ var animal = new Animal(); var cat = new Cat(); animal.showName.call(cat,",");
//通过call或apply方法,将原本属于Animal对象的showName()方法交给当前对象cat来使用了。 //输入结果为"Cat"
</script>
call函数实现对象继承
<script language="javascript"><!-- function Class1() { this.showTxt = function(txt) { alert(txt); } } function Class2() { Class1.call(this); } var c2 = new Class2(); c2.showTxt("cc"); </script>
c2对象可以具有了 Class对象的所有方法
apply()函数
对于apply和call两者在作用上是相同的,但两者在参数上有区别的。
对于第一个参数意义都一样,但对第二个参数:
apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,而call则作为call的参数传入(从第二个参数开始)。
如 func.call(func1,var1,var2,var3)
对应的apply写法为:func.apply(func1,[var1,var2,var3])
相关文章推荐
- js中call和apply(函数的上下文调用模式)详解
- 第195天:js---函数对象详解(call、apply)
- js中call和apply(函数的上下文调用模式)详解
- js中的apply()和call()方法详解
- JavaScript中的apply和call函数详解
- JavaScript中的apply和call函数详解
- 原生JS:Function对象(apply、call、bind)详解
- js(十三)——函数call和apply
- Js的call()、apply()方法详解
- js的 function, javascript内置对象apply,call,this概念及之间的关系详解
- Js apply call方法 详解
- JS中call/apply、arguments、undefined/null方法详解
- Js中apply()与call()使用详解
- js中apply()方法与call()方法详解
- javascript(js)中函数apply和call的用法、区别、联系
- js学习三、“普通”函数中的this,以及call,apply用法
- JavaScript中的apply和call函数详解
- JS函数中的 apply() 和 call()
- JavaScript中的apply和call函数详解(转)
- 详解js中的apply与call的用法