zoukankan      html  css  js  c++  java
  • JS面向对象的实现和原理

    从原型生成实例,JS提供了构造函数模式(constructor):

      构造函数就是普通的函数,但是内部使用this变量,对构造函数使用new运算符时,就能生成实例,并且this对象绑定在实例对象上。

      例:

        function Dog(name,color){

          this.name = name;

          this.color = color;

        }

        var dog1 = new Dog("a","yellow");

        var dog2 = new Dog("b","black");

        dog1.name ==> "a"

      实例对象自动包含有一个constructor属性,指向他们的构造函数。

        dog1.constructor == Dog

    构造函数模式生成实例对象存在内存浪费问题,因为每个构造函数的成员都会被重新创建,即使是不变的那些。

    因此JS提供了Prototype模式:每一个构造函数都有一个prototype属性,指向另一个对象,即原型对象,这个对象的所有属性和方法,都会被构造函数的实例对象所继承。

      例:接上

        Dog.prototype.type = "DOG";

        Dog.prototpe.bite = function(){alert("bite");}

        var dog3 = new Dog("c","white");

        var dog4 = new Dog("d","red");

        dog3.type ==>"DOG"

        dog3.type == dog4.type

    配合prototype属性的方法:

      isPrototypeOf:是某个对象的构造方法的原型。

        Dog.prototype.isPrototypeOf(dog1) ==>true

      hasOwnProperty:判断对象属性是本身的还是继承自原型的。

        dog4.hasOwnProperty("type") ==>false

      in:判断是否包含某个属性,不管本身还是继承。或者用来遍历对象所有属性。

        "name" in dog4 ==>true

        for(var p in dog4){alert(p);}

    _proto_:由实例直接指向原型

        

  • 相关阅读:
    SpringBoot:Web开发
    java @Value注解 和 @Data注解
    携程 Apollo 配置中心传统 .NET 项目集成实践
    Spring Boot 整合 JPA 使用多个数据源
    ibatis 核心原理解析!
    Spring Boot 面试,一个问题就干趴下了!
    在Docker中部署Spring Boot项目
    REDIS缓存穿透,缓存击穿,缓存雪崩原因+解决方案
    超全详解Java开发环境搭建
    SpringBoot入门(一):从HelloWorld开始
  • 原文地址:https://www.cnblogs.com/zawjdbb/p/6433762.html
Copyright © 2011-2022 走看看