zoukankan      html  css  js  c++  java
  • 简单理解javascript中的原型对象,实现对之间共享属性和行为

    javascript中提供了构造函数。可以方便的创建对象。

    典型的构造函数例如以下:

    function Person(name, age) 
    {   
      this.name = name;
      this.age = age;
      this.say = function () {
        return this.name  + ',' + this.age;;
    }

     

    之后就能够用new和构造函数创建多个对象。javascript中。类的不同对象之间,属性和方法都是独立的。什么意思呢?java中类的不同对象之间,成员变量是独立的(每一个对象都有自己的存储空间。存储属性值)。可是方法是共享的,内存中仅仅有一份。可是javascript中,方法也是一个对象一份。假设复创建了多个对象,那么每一个对象中的方法都会在内存中开辟新的空间,这样浪费的空间就比較多。

    var p1= new Person('a', 25);
    var p2= new Person('b', 22); 
    alert(p1.say == p2.say);//结果返回的是false,说明方法内存空间也不同



    javascript中没有什么static和成员变量之分,假设想在对象之间共享数据或方法,仅仅能借助原型对象。将共享的变量和方法都放在原型对象中。

    function User(name,age)
    {
        this.name = name;
        this.age = age;
    }
    User.prototype.addr = 'shenzhen';//在原型中加入属性
    User.prototype.show = function(){//在原型中加入方法
        alert(this.name+'|'+this.age);    
    };
    var user1 = new User('ZXC',22);
    var user2 = new User('CXZ',21);
    alert(user1.show == user2.show);//返回 true 说明show方法是共享的

     

    JS的构造函数都有一个prototype属性,指向它的原型对象(事实上就是个普通的JS对象)。

    通过同一个构造函数创建出来的对象。共享同一个原型对象。原型对象初始化的时候是空的。我们能够在里面自己定义不论什么属性和方法,这些方法和属性都将被该构造函数所创建的对象继承。

    假设原型发生了变化。那么全部实例都会跟着改变。

  • 相关阅读:
    ActiveMQ JBDC巨坑记录:java.sql.SQLException: Cannot create PoolableConnectionFactory (Communications link failure,Cannot create PoolableConnectionFactory (Communications link failure
    请求https接口时的SSLHandshakeException
    MySQL授权命令grant注意事项
    一次docker服务启动失败的总结
    zabbix-agent和zabbix-agent2的区别,zabbix-agent的主动和被动模式
    MySQL alter修改语句
    zabbix监控tcp的11种状态
    MySQL创建数据库并且插入数据
    MySQL的基础语法
    设置MySQL密码
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/7205044.html
Copyright © 2011-2022 走看看