首页 JavaScriptJS知识点正文

面向对象---继承

面向对象能用在哪里?

大型东西

继承:给父级添加一个东西,子级自然就有

游戏


继承父级点啥?

属性

方法



父级(类)

Person() 人类

name,age

showName,showAge

子级(类)

Worker() 工人

name,age   job

showName,showAge


showJob


属性:

父级构造.call(this,arg1,arg2....);

父级构造.apply(this,arugments)



强制改变this指向:

.call(this指向谁,arg1,arg2.....);

.apply(this指向谁,[arg1,arg2....])


方法:

1. 子级构造.prototype=父级构造.prototype


引用:对象 ,一个更改了全都更改了

2. 循环

  for(var name in 父级构造.prototype){

子级构造.prototype[name]=父级构造.prototype[name];

  }


瑕疵:w1 instanceof Person -> false


3. 子级的构造.prototype=new 父级构造()


瑕疵:w1.constructor==Person

4. 子级的构造.prototype=new 父级构造()

  子级的构造.prototype.constructor=子级构造;



<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>继承</title>
    <style>
    </style>
    <script>
        /*父类*/
        function Person(name,age){
            this.name='名字:'+name;
            this.age=age;
        }
        Person.prototype.showName=function(){
            return this.name;
        };
        Person.prototype.showAge=function(){
            return this.age;
        };
        /*子类*/
        function Worker(name,age,job){

            //Person.call(this,name,age);  //继承属性
            //Person.apply(this,[name,age]);
            Person.apply(this,arguments);

            this.job=job;
        }
        //方法继承
        Worker.prototype=new Person();
        Worker.prototype.constructor=Worker;

        Worker.prototype.showJob=function(){
            return this.job;
        };


        var p1=new Person('abc',30);
        var w1=new Worker('def',16,'程序员');
        //alert(p1.showJob);
        //alert(w1.showName());
        //alert(w1.showJob);
        //w1 Worker Person
        //alert(w1 instanceof Person);
 alert(w1.constructor==Worker);
    </script>
</head>
<body>
</body>
</html>


版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

评论