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 @ 2016-04-16 10:55  Seaurl  阅读(270)  评论(0编辑  收藏  举报