js 继承

复制代码
1、将继承部分封装成函数

<html> <head> <script> function extend(Child,Parent){ var F = function(){}; F.prototype = Parent.prototype; Child.prototype=new F(); Child.prototype.constructor=Child; Child.uber=Parent.prototype; } function Shape() {} Shape.prototype.name = 'Shape'; Shape.prototype.toString = function () { return this.constructor.uber ? this.constructor.uber.toString() + ', ' + this.name : this.name; }; function TwoDShape() {} extend(TwoDShape,Shape); TwoDShape.prototype.name = '2D shape'; function Triangle(side, height) { this.side = side; this.height = height; } extend(Triangle,TwoDShape); Triangle.prototype.name = 'Triangle'; Triangle.prototype.getArea = function () { return this.side * this.height / 2; }; function myclick(){ var my = new Triangle(); console.log(my.toString()); } </script> </head> <body> <div style="width:100px;height:100px;background:red;" onclick="myclick()"></div> </body> </html>
复制代码

 2、属性拷贝

复制代码
<html>
<head>
<script>
function extend2(Child,Parent){
    var p = Parent.prototype;
    var c = Child.prototype;
    for(var i in p){
        c[i] = p[i];
    }
    c.uber = p;
}

function Shape() {}
Shape.prototype.name = 'Shape';
Shape.prototype.toString = function () {
    return this.constructor.uber
    ? this.constructor.uber.toString() + ', ' + this.name
    : this.name;
};


function TwoDShape() {}
extend2(TwoDShape,Shape);
TwoDShape.prototype.name = '2D shape';


function Triangle(side, height) {
    this.side = side;
    this.height = height;
}
extend2(Triangle,TwoDShape);
Triangle.prototype.name = 'Triangle';
Triangle.prototype.getArea = function () {
    return this.side * this.height / 2;
};

function myclick(){
    var my = new Triangle();
    console.log(my.toString());
}
</script>
</head>
<body>
<div style="width:100px;height:100px;background:red;" onclick="myclick()"></div>
</body>
</html>
复制代码

 3、属性拷贝

function extend2(Child,Parent){
    var p = Parent.prototype;
    var c = Child.prototype;
    for(var i in p){
        c[i] = p[i];
    }
    c.uber = p;
}

4、对象之间的继承

复制代码
function extendCopy(p){
    var c = {};
    for(var i in p)
    {
        c[i] = p[i];
    }
    c.uber = p;
    return c;
}
复制代码

5、深复制

复制代码
function deepCopy(p,c){
    c = c||{};
    for(var i in p){
        if(p.hasOwnProperty(i)){
            if(typeof p[i] === 'object')
            {
                c[i] = Array.isArray(p[i])?[]:{};
                deepCopy(p[i],c[i]);
            } else {
                c[i] = p[i];
            }
        } 
    }
    return c;
}
复制代码

6、object()

function object(o){
    var n;
    function F(){}
    F.prototype=o;
    n = new F();
    n.uber=o;
    return n;
}

7、原型继承与属性复制的混合应用 

复制代码
function objectPlus(o,stuff){
    var n;
    function F(){}
    F.prototype = o;
    n = new F();
    n.uber = o;
    for(var i in stuff){
        n[i] = stuff[i];
    }
    return n;
}
复制代码

 8、多重继承

复制代码
function multi(){
    var n = {}, stuff, j=0, len=arguments.length;
    for(j=0;j<len;j++){
        stuff = arguments[j];
        for(var i in stuff){
            if(stuff.hasOwnProperty(i)){
                n[i]=stuff[i];
            }
        }
    }
    return n;
}
复制代码

9、寄生式继承

10、构造器借用

 

posted @   Seaurl  阅读(271)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示