zoukankan      html  css  js  c++  java
  • ES5构造函数及原型

      在ES6之前,并没有引入类的概念;所以对象不是基于类进行创建的,而实通过构造函数(一种特殊的函数)来定义对象和它们的特征;

      创建对象的三种方式:

    1. 对象字面量
      var person = {name:'',age:''}
      
    2. new Object({})

    3. 自定义构造函数,用来初始化对象,即为对象成员变量赋值,与new操作符一起使用。

      1. new在内存中创建一个新的空对象
      2. 让this指向这个对象
      3. 执行构造函数里的代码,给这个新的对象添加属性和方法
      4. 返回这个新的对象(所以构造函数里不用return返回对象,因为new操作符已经完成了这个动作)

      对象中的实例成员和静态成员:

    1. 静态成员,在构造函数本身上添加的成员,只能通过构造函数访问
    2. 实例成员,只能通过实例化的对象来访问

      构造函数中存在的浪费内存问题:不同实例对象中的函数,都会各自开辟一片内存空间来保存,但实际上,这个函数是一样的,开辟内存会浪费时间,也会浪费内存空间,可以通过原型对象解决

    1. 每一个构造函数都有一个特殊的属性--prototype,指向另一个对象(原型对象),而这个对象的所有属性和方法都会被构造函数所拥有;--可以把不变的方法定义对原型对象上,这样所有的实例对象都可以共享这个方法,从而实现节省内存的目的!
    2. 那么实例化对象是如何访问到原型对象中的属性和方法的?----系统会在实例对象身上自动添加一个属性__proto__(称为对象原型),指向构造函数中的原型对象prototype;(实际上两者等价)只要是对象,就会有__proto__属性,指向其原型对象(Object的prototype原型对象的原型为null)
    3. 原型对象(对象原型)的一个属性constructor:指向对象的构造函数,也可以通过这个属性修改对象的构造函数
    4. 构造函数中和构造函数的原型对象中的this,指向的都是实例对象;
    5. 原型链的查找规则:(对象成员的查找机制)
      1. 当访问一个对象的属性或方法时,首先查找这个对象本身有没有这个属性;
      2. 若没有,则查找它的原型;(也就是实例对象的__proto__指向的原型对象prototype)
      3. 若没有,则查找原型对象的原型(Object的原型对象)
      4. 依次类推,一直找到Object原型对象的原型为止(null)
      5. (就近原则应用属性)

          

  • 相关阅读:
    PAT (BL) 1001
    mysql启动报错:/usr/bin/mysqld_safe: line 183: 17006 Killed nohup /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin......
    动态规划:某个单词增加,删除,替换字母而成为另一个单词的最小变更次数?
    ng-class最好用的一种方法
    java数据结构基本框架
    后台运行tomcat和mysql的方法
    mysql无法开启,报错:MySQL Daemon failed to start.
    linux CentOS6.5 yum安装mysql 5.6
    idea mybatis报错:<statement> or DELIMITER expected, got 'id'
    angularjs $http与springmvc @RequestBody
  • 原文地址:https://www.cnblogs.com/joeynkay/p/12734649.html
Copyright © 2011-2022 走看看