JS中级 - 面向对象5(继承,引用)

    <script type="text/javascript">
    //------------------Person类
    //(Person)的构造函数
    function Person(name, sex) {
        this.name = name;
        this.sex = sex;
    }
    Person.prototype.showName = function() {
        console.log(this.name)
    };
    Person.prototype.showSex = function() {
        console.log(this.sex)
    };
    //var obj = new Person("tangsan","男");
    //obj.showName();

    //------------------Worker类
    //(Worker)的构造函数
    function Worker(name, sex, job) {
        console.log(this) //this->是new出来的Woker对象

        //构造函数伪装:
        //调用父级(Person)的构造函数 —— 1.为了继承属性
        Person.call(this, name, sex);
        this.job = job;
    }
    
    //原型链:
    //2.原型来继承父级原型
    Worker.prototype = Person.prototype;

    Worker.prototype.showjob = function() {
        console.log(this.job)
    }

    var Workerobj = new Worker("流川枫", "女", "篮球员");
    Workerobj.showjob();
    </script>

继承:

  1. 父类的构造函数。

  2. 子类继承属性。

//(Worker)的构造函数
    function Worker(name, sex, job) {
        console.log(this) //this->是new出来的Woker对象

        //构造函数伪装:
        //调用父级(Person)的构造函数 —— 1.为了继承属性
        Person.call(this, name, sex);
        this.job = job;
    }
  1. 继承父类的方法。
    //原型链:
    //2.原型来继承父级原型
    Worker.prototype = Person.prototype;

子类影响父类的问题:

console.log(Person.prototype.showjob);

//输出:
//function () {
//        console.log(this.job)
//    }

引用:

钥匙,同一块区域的地址
记住,js里面所有的对象全是引用。

   var arr1 = [1,2,3];
    var arr2 = arr1;//配钥匙
    arr2.push(4);
    console.log(arr2);//1234
    console.log(arr1);//1234

如果我不希望是一个引用,我希望我修改arr2的时候,arr1不受影响,怎么做呢?ex:

    var arr1 = [1,2,3];
    var arr2 = [];
    for(var i in arr1){//把arr1里的东西复制一份到arr2中。
        arr2[i]=arr1[i];
    }
    arr2.push(4);
    console.log(arr2);//1234
    console.log(arr1);//123

继承父类的方法的代码修改为:

    //原型链:
    //2.原型来继承父级原型
    //Worker.prototype = Person.prototype;
    for (var i in Person.prototype) {
    	Worker.prototype[i] = Person.prototype[i]; 
    }

instanceof

instanceof 运算符用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性。

type of :....的类型

var arr1 = [1,2,3];
    console.log(arr1 instanceof Array);//true
    console.log(arr1 instanceof Object);//true 所有的类都是Object的一个子类,从object继承来的
posted @ 2017-10-06 21:05  【唐】三三  阅读(215)  评论(0编辑  收藏  举报