码迷,mamicode.com
首页 > 其他好文 > 详细

call函数的详解

时间:2015-12-09 23:15:29      阅读:300      评论:0      收藏:0      [点我收藏+]

标签:

因为最近到期末,又要准备六级,要准备的考试有点多,其实就是犯懒了。

今天还是有点自责,还是得学习学习,写点东西,好了不说废话了,直接写。

------------------------我是厉害的分割线-----------------------------------------------------------------

今天在前端群里看到一个

Dmitry Baranovskiy 的博客中有篇文章(链接),其中有五段小代码,用来测试是否理解JavaScript 的核心,闭包和作用域。

然后前面几个还是有问题,不过大部分都解决了。

最后一个,call函数让我反应一会,然后我以为我没看过(该打!)

我就去百度,看到官方解释:

all 方法
调用一个对象的一个方法,以另一个对象替换当前对象。

call([thisObj[,arg1[, arg2[,   [,.argN]]]]])

参数
thisObj
可选项。将被用作当前对象的对象。

arg1, arg2,  , argN
可选项。将被传递方法参数序列。

说明
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。

如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。

一下把我唬住了,这什么玩意啊,突然我想到这不就是继承。

function a(name){
this.name=name;
this.show=function(){
            alert("i am "+this.name);
                }    
}       

function b(name){
this.name=name;

a.call(this,name);
} 

var b1= new b(‘b‘);
b1.show();

弹出结果“i am b”

b中是没有show方法的。

直接是我们说的继承。

看了好多博客说的都是用替换来说的,说的有点绕不能真正理解,我觉得按照我的继承理解还是很正确的。

还有多重继承,不知道我的理解是否有点偏颇。

function class1()

{

   this.name = function(){

    alert("class1的方法name()");

   }

}

 

 

function class2()

{

 

class1.call(this);//要想实现class2继承class1 this就是当前对象class2。

}

 


 

var cl = new class2();

 

cl.name();//class2继承了class1,class2是父类。调用父类的方法

 

 

//另外一种实现继承的方式:用一个继承函数,专门实现继承。

 

function extend()

{

  class2.call(this);

  class1.call(this);

}

还有apply就不在本文的讨论范围了。

---------------------我是厉害的分割线----------------------------------------------------------------------

下次就看看ECMAScript

和他的继承方式

 

call函数的详解

标签:

原文地址:http://www.cnblogs.com/growlove/p/5034534.html

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