zoukankan      html  css  js  c++  java
  • 面向对象

    1.封装

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <title>封装1</title>
    </head>
    <body>
    
    </body>
    <script>
      // 1.普通的对象
      var cat = {
        name: 'jane',
        color: 'yellow'
      }
      console.log(cat)
      // 2.函数生成
      function Cat (name, color) {
        return {
          name: name,
          color: color
        }
      }
      var cat1 = Cat('one', 'green')
      var cat2 = Cat('two', 'yellow')
      console.log(cat1,cat2)
      // 3.构造函数
      function Cat2 (name, color) {
        this.name = name
        this.color = color
      }
      Cat2.prototype.type="猫科动物"
      Cat2.prototype.eat = function() {console.log('吃老鼠')}
      var cat3 =new Cat2('three', 'green')
      var cat4 =new Cat2('four', 'yellow')
      console.log(cat3,cat4)
      console.log(cat3.constructor)
      console.log(cat3.eat) // 吃老鼠
    
      // 4.Prototype模式的验证方法
    
      // 4.1 isPrototypeOf() 判断某个实例对象个某个实例之间的关系
      alert(Cat2.prototype.isPrototypeOf(cat3))
    
      // 4.2 hasOwnProperty 判断某个属性是本地属性还是继承自prototype
    
      alert(cat3.hasOwnProperty("name"))
      alert(cat3.hasOwnProperty("eat"))
    
      // 4.3 in 判断某个实例是否含有某个属性,不管是不是本地属性,in也可以遍历某个对象的所有属性
      alert("name" in cat3)
      for(var prop in cat) {
        console.log(prop)
      }
    </script>
    </html>

    2.继承

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <title>继承</title>
    </head>
    <body>
    
    </body>
    <script>
      function Animal() {
        this.species = "动物"
      }
      function Cat (name, color) {
        this.name = name
        this.color = color
      }
    
      console.log(Animal())
    
      // 1. call/apply,将父对象的构造函数绑定在子对象上,直接改变this的指向
      function Cat(name, color) {
        Animal.apply(this, arguments)
        this.name = name
        this.color = color
      }
    
      var cat1 = new Cat('大黄', '蓝色')
      console.log(cat1.species)
    
      // 2. prototype
      Cat.prototype = new Animal()
      Cat.prototype.constructor = Cat
      var cat2 = new Cat('大黄', '蓝色')
      console.log(cat2.species)
      // 3. 直接继承prototype
      function Animal1 () {}
      Animal1.prototype.species = "动物"
      Cat.prototype = Animal1.prototype
      Cat.prototype.constructor = Cat
    
      var cat3 = new Cat('大黄', '蓝色')
    
      console.log(cat3.species)
      console.log(Animal1.prototype.constructor)
    
      // 4. 空对象继承
     function extend(Child, Parent) {
      var F = function(){};
      F.prototype = Parent.prototype;
      Child.prototype = new F();
      Child.prototype.constructor = Child;
      Child.uber = Parent.prototype;
     }
    // 5.拷贝继承
      function extend2 (Child, Partent) {
        var p = Partent.prototype
        var q = Child.prototype
        for (var prop in p) {
          q[prop] = p[prop]
        }
        q.uber = p
      }
    </script>
    </html>
  • 相关阅读:
    selenium
    js兼容
    gcc 编译问题
    winrar 命令行 解压文件
    php 页面 不显示任何错误提示
    php 禁止谷歌蜘蛛抓取
    LINUX 实现端口转发
    phpredisadmin 莫名其妙错误,打开了无法显示任何数据
    Convert.ToInt32、(int)和int.Parse三者的区别
    C# 点击打开浏览器
  • 原文地址:https://www.cnblogs.com/xuyan1/p/8990576.html
Copyright © 2011-2022 走看看