[原创] JS 继承详解。欢迎拍砖
最近迷上了JS 没办法 搞WEB离不开这东西 ,所以如果哪位仁兄还说JS无用论 还请绕道
过开发积累的经验 加上书本上的知识 (也算是理论与实际相结合吧)总结此文 也算是自己学习阶段的一份总结吧 !希望给广大JS 爱爱好者一点帮助
废话不多说 JS 继承一般分为3种 今天先说第一种类式继承
首先来说JS 本事是没有类的概念的 。JS 的类实际就是function 对象 先上码
<script> function Test(name){ this.name = name; } Test.prototype.fun = function(){alert(0)} testInc = new Test('111'); testInc.fun(); console.dir(testInc) </script>
首先,我们定义了function Test 我们可以把这个当成一个类 类似 class Test{}
然后我们定义了类的一个属性name ,给这个方法(类)的prototype属性定义了一个方法 //alert(0)
剩下的动作相信无论搞什么语言的同学都知道了。
介绍下prototype 属性。 当你定义了一个方法的时候(也可以像我们这样把他当成类) 方法都会创建一个prototype属性 用来返回对象类型原想的引用的
具体是都有什么有兴趣的同学 可以console.dir(Test); 在chrome或者fireFox上看下
通过给Function 的prototype 添加方法的过程 我们可以实现动态的 给类添加方法 并且在实例中调用他
好了,准备工作完毕 然后我们创建一个子类 实现JS继承 首先JS 是没有extend 这种关键字的。(自定义的除外)
但是根据上面的思路我们可以给一个类 添加 另一个类的属性 和方法 实现继承关系(并不是真的继承)代码如下
<script> function Test(name){ this.name = name; } Test.prototype.fun = function(){alert('my name is '+this.name);} function subTest(name,age){ Test.call(this,name); //实现属性继承 this.age = age } subTest.prototype = new Test(); //实现方法继承 subTest.prototype.constructor = subTest; subTest.prototype.subfun = function (){alert('my name is'+this.name+' and my age is '+this.age)} subTestIns = new subTest('xiaojiang','24'); subTestIns.fun(); //my name is testName subTestIns.subfun(); //my name is testName and my age is testAge </script>
call 调用一个对象的一个方法,以另一个对象替换当前对象
call([thisObj[,arg1[, arg2[, [,.argN]]]]])
参数
thisObj
可选项。将被用作当前对象的对象。
arg1, arg2, , argN
可选项。将被传递方法参数序列。 同样的方法还有 apply 只是把call后面的参数改成 Array 调用罢了
这样可以使 子类获得父类的属性name;
再把父类的方法附加给子类 这样就实现了JS 的类式继承。