[原创] 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 的类式继承。   

     

     

posted @ 2012-04-20 22:57  ﹏Sakura  阅读(647)  评论(0编辑  收藏  举报