标签:
因为最近到期末,又要准备六级,要准备的考试有点多,其实就是犯懒了。
今天还是有点自责,还是得学习学习,写点东西,好了不说废话了,直接写。
------------------------我是厉害的分割线-----------------------------------------------------------------
今天在前端群里看到一个
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
和他的继承方式。
标签:
原文地址:http://www.cnblogs.com/growlove/p/5034534.html