Function的扩展(1):继承 - 面向对象网,web开发,Prototype,学习,对象 - 面向对象技术开发

面向对象技术开发

会员投稿 投稿指南 站长资讯通告:
您的位置: 首页 > Web开发 > Prototype > 正文

Function的扩展(1):继承

来源: www.bianceng.cn 阅读:

作为技术类的开篇文章,很是纠结了一番到底写什么的。想了想,就写面向对象吧。。始终对于我们程序员来说,面向对象是写一篇好文章。对不起习惯了。应该说是写一篇好代码的开始。

而面向对象的三大特征中最重要的就是继承了。

继承现在有很多种写法,google一下到处都是。我就不再在这里重复了。直接上我的代码吧。

核心功能代码如下:

Function.prototype.Implement = function (parentType) {
    //判断父类是否存在以及是否为可继承类型
    if (parentType != undefined && typeof (parentType) == "function") {
        var temp = this.prototype;
        this.prototype = new parentType();
        for (var i in temp) {
            this.prototype[i] = temp[i];
        }
        this.prototype.base = parentType.prototype;
    }
}

核心功能有了。让我们来测试一下在js中传统继承所具有的特征吧。

先声明父类

var parent= function () {
    //constructor
}
parent.prototype = (function () {
    //private
    return {
        //public
        SomeVar:"I'm the first generation"
        DoSomeStaff:function(){
           console.write(this.SomeVar);
        }
    };
})();

这里对大家进行一下推荐。这种类的声明方法。

可以通过我的注释看到。有构造方法。有私有方法。有公有方法。

然后我们声明一下继承类

var child= function () {
    //constructor
}
child.prototype = (function () {
    //private
    return {
        SomeVar:"I'm the second generation"
        DoSomeStaff:function(){
           this.base.DoSomeStaff.call(this);//调用父类的方法
        }
    };
})();
//这里表示child继承了parent
//是不是比传统的写法要更符合高级语言的语序?
child.Implement(parent)

然后我们进行测试

var p1=new parent();
p1.DoSomeStaff()//output:I'm the first generation
var c1=new child();
c1.DoSomeStaff()//output:I'm the second generation
c1 instanceof parent//true
c1 instanceof child//true

可以看见,我这个继承写法的好处在于在继承和调用父类的时候更接近高级语言的语序和语法。使得代码在阅读方面有所提高。

当然这个写法还是有一定的局限性。

例如如果进行多重继承以后会出现只能找到最后一个父类的情况。

本文出自 “技术源于专注” 博客,请务必保留此出处http://mt830813.blog.51cto.com/7611383/1255645

查看本栏目更多精彩内容:http://www.bianceng.cn/webkf/prototype/

Tags:
相关文章列表: