欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JavaScript 继承,原型继承

程序员文章站 2022-03-04 14:10:51
...


demo.html(不使用原型,直接继承):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        //当前没有的属性和方法,别人有,拿过来用 ,就是继承

        var o = {  // 子类对象。

        }

        var parent = {   // 要继承的对象。
            name :"张三",
            age : 18,
            sayHello :function () {
                console.log("Hello world");
            }
        }

        //混入式继承
        for(var k  in parent){
            o[k] = parent[k];
        }

        console.log(o);

    </script>
</head>
<body>

</body>
</html>


demo.html(使用原型继承的三种方式):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        //原型继承(往子类原型中添加要继承的属性和方法)

        //原型继承的三种方式
        //一、给子类的原型对象中添加成员(通过对象的动态特性) 不是严格意义上的继承
        function Person(name, age){
            this.name = name;
            this.age = age;
        }

        Person.prototype.sayHello = function () {   // 直接为子类原型添加要继承的方法。
            console.log("我想死你了");
        }

        var p = new Person("冯巩",50);
        p.sayHello();

        //这里的p对象就继承原型


//////////////////////////////////////////////////////////////////////
        //二、直接替换原型对象
        function Person(name, age){
            this.name = name;
            this.age = age;
        }

        Person.prototype.sayHi = function () {
            console.log("Hey man");
        }

        var parent = {
            sayHello : function () {
                console.log("我想死你了");
            }
        }
//
        Person.prototype = parent;   // 直接为子类原型替换成要继承的对象。 原型原有的成员会丢失。

        var p = new Person("冯巩",50);
        p.sayHello();
//        p.sayHi();  替换之后,sayHi方法不复存在

        //p对象继承了原型对象(parent对象)
        //注意:使用替换原型的方式实现继承的时候,原型中原有的成员就会丢失


/////////////////////////////////////////////////////////////////////////
        //三、利用混入的方式(for in 遍历)给原型对象添加成员
       function Person(name, age){
           this.name = name;
           this.age = age;
       }

       Person.prototype.sayHi = function () {
           console.log("Hey man");
       }

       var parent = {
           sayHello : function () {
               console.log("我想死你了");
           }
       }

       for(var k in parent){
           Person.prototype[k] = parent[k];   // 通过for遍历添加要继承的方法/属性  (用k赋值时,要用[],不能用点语法)
       }

       var p = new Person("冯巩",50);
       p.sayHello();

        //也是实现了继承 p继承自原型对象

    </script>
</head>
<body>

</body>
</html>