zoukankan      html  css  js  c++  java
  • 继承

    继承:父对象的成员,子对象不用重复创建,也可以直接使用 这样就可以节约内存,代码重用
    原型对象:专门集中存储一类子对象相同属性和功能的父对象 同一类子对象所共有的属性或方法
    unction Student(sname,sage){

      this.name1 = sname;
      this.sage1 = sage;
    }
    //原型对象 prototype 是构造函数的一个属性
    Student.prototype.intr = function (){

      console.log(`姓名${this.name1},年龄${this.sage1}`);
    }
     
    var li = new Student('li',20);
    var wang = new Student('wang',21);
    console.log(li);
    // 在原型对象中添加属性
    Student.prototype.classname = '大一';
    console.log(li.classname);
    console.log(wang.classname);
    // 访问原型对象
    li.intr();
    wang.intr();
    //修改原型对象中的属性或方法 不会改变原型对象中的属性值,而是在子对象中自己添加一个新的属性
    li.classname = '大三';
    console.log(li.classname,wang.classname);
     
     
    自由属性和共有属性
    创建的类型名.属性/方法名
    赋值:
    自有属性:对象名.属性 =值;
     共有属性:构造函数.prototype.属性名 = 值
     鉴别自有属性 var bool.hasOwnProperty("属性名")
     判断属性名是否是obj的自有属性
     true:为自有属性
     false:不是自有属性,共有属性,不存在的属性
     
    自有属性
     var own = li.hasOwnProperty('name1');
     console.log(own);//true
     
     

    function checkProperty(obj,pname){

      if(obj.hasOwnProperty(pname)){
        console.log('自有属性');

      }else if(pname in obj){//if(obj[pname] !== undefined)
        console.log('共有');
        // 检测panme中存储的属性名是否在obj对象中,
      }else{
        console.log('没有');
      }
    }
    checkProperty(li,"sage1");//自有
    checkProperty(wang,"classname");//共有
    checkProperty(li,"teacher");//没有
     
     
    原型链
    原型链本身也是对象,因此原型对象也有原型    对象就有_proto_,由多级父元素逐级继承形成的链式结构
    原型链保存着:所有对象的成员(方法和属性)
    原型链作用:控制对象访问成员的使用顺序:优先使用自己的,自己没有,才延原型链向父级查找
    作用域链作用:控制变量的使用顺序(优先使用活动对象(AO)中的局部变量,局部中没有,才去延用作用域链向父级作用域查找)
    原型链最顶端:Object.prototype
      作用域链的终点:window
     
    // 定义父类型
    function Car(speed, fee) {
    this.speed = speed;
    this.fee = fee;
    }
    Car.prototype.ride = function() {
    console.log(`骑行的速度${this.speed},费用为${this.fee}`);
    }

    //让getbrand的原型对象继承Car的原型对象
    Object.setPrototypeOf(Ofo.prototype, Car.prototype);

    function Ofo(speed, fee, brand) {
    // this.speed = speed;
    // this.fee = fee;
    Car.call(this, speed, fee); //父类型构造函数.call(this,参数...)
    this.brand = brand;
    }
    Ofo.prototype.getbrand = function() {
    console.log(`品牌为${this.brand}`);
    }
    var car1 = new Ofo(10, 2, 'ofo');
    car1.getbrand();
    car1.ride();

    //让getcopy的原型对象继承Car的原型对象
    Object.setPrototypeOf(Hello.prototype, Car.prototype);

    function Hello(speed, fee, copy) {
    // this.speed = speed;
    // this.fee = fee;
    Car.call(this, speed, fee); //父类型构造函数.call(this,参数...)
    this.copy = copy;
    }
    Hello.prototype.getcopy = function() {
    console.log(`品牌为${this.copy}`);
    }
    var car2 = new Hello(15, 1.5, 'Hello');
    car2.getcopy();
    car2.ride();
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    HDU2045_LELE的RPG难题
    HDU2050_折线分割平面数
    HDU1159_最长公共子序列
    ASP.NET 页生命周期概述
    Hadoop编译
    .Hadoop NameNode单点问题解决方案之二 AvatarNode 部署
    Pig调试环境
    HADOOP综合应用架构之一 配置Secondarynamenode在另一台机器运行
    JAVA采用远程连接Hive
    Windows Server 2003 FTP服务器配置详解
  • 原文地址:https://www.cnblogs.com/zhanghaifeng123/p/11332277.html
Copyright © 2011-2022 走看看