构造函数与对象

构造函数是类中的特殊成员函数,用于为对象分配内存。它可用于为数据成员提供值。创建对象时将调用构造函数。它与类具有相同的名称。构造函数不返回任何值。

构造函数是生成对象的模板,一个构造函数可以生成多个对象,每个对象都有相同的结构。 构造函数的缺点就是,每当你实例化两个对象时,需要调用两次构造函数的某一个方法,这带来的坏处就是占用内存,而且没必要。
其次,为了解决构造函数的属性和方法无法被对象实例所共享的问题,我们可以把需要共享的属性和方法放在原型(prototype)对象上。原型对象上的所有属性和方法,都会被对象实例所共享。对于构造函数来说,prototype是作为构造函数的属性;对于对象实例来说,prototype是对象实例的原型对象。所以prototype即是属性,又是对象。
然后,除了undefined和null之外,每一个数据类型都可以看成一个对象,每一个对象都有它的原型。所有一切对象的原型顶端,都是Object.prototype,即Object构造函数的prototype属性指向的那个对象。当然,Object.prototype对象也有自己的原型对象,那就是没有任何属性和方法的null对象,而null对象没有自己的原型。
原型链的特点有:
a:读取对象的某个属性时,JavaScript引擎先寻找对象本身的属性,如果找不到,就到它的原型去找,如果还是找不到,就到原型的原型去找。如果直到最顶层的Object.prototype还是找不到,则返回undefined。
b:如果对象自身和它的原型,都定义了一个同名属性,那么优先读取对象自身的属性,这叫做“覆盖”(overiding)。
c:一级级向上在原型链寻找某个属性,对性能是有影响的。所寻找的属性在越上层的原型对象,对性能的影响越大。如果寻找某个不存在的属性,将会遍历整个原型链。
再次,constructor属性是原型对象上的一个属性,可以被所有实例对象所共享。要注意的是,prototype是构造函数的属性,而constructor则是构造函数的prototype属性所指向的那个对象,也就是原型对象的属性。由于constructor属性是一种原型对象和构造函数的关系,所以在修改原型对象的时候,一定要注意constructor的指向问题。
最后,instanceof运算符返回一个布尔值,用于判断对象是否为某个构造函数的实例。

任何函数都是构造函数,如果通过new就可以得到一个对象。通过函数不同的上下文调用分下面几种:
(1). 当在一个函数调用之前有new关键字,则上下文为新建的对象;
//任何函数可以new 创建一个对象
(2). 当一个函数使用call或者apply调用时,给定的第一个参数即为上下文;
//构造方法中可以写成员方法。然后通过对象来调用
(3). 否则,如果一个函数作为一个对象的属性(obj.func)或者obj['func'])来调用时,它就把该对象作为上下文来运行;
//上边new fun2()没意义,直接 fun2()调用,这里在全局上下文运行
(4)如果与上述几条都不符的话,则函数将在全局上下文中运行。

Constructor:是用于创建和初始化类中创建的一种特殊方法。constructor属性返回对创建此对象的数组函数的引用。

object:object是js自带的函数对象,可以有属性和方法。

在定义以后,不能在使用new创建对象实例,可以复制给其他变量,多个变量同时引用一个对象,或者克隆对象。具有多态性,无法继承,除非用复制的方式来实现

最新文章

  1. Native App执行JS
  2. YII Framework学习教程-YII的日志
  3. swift之元组类型
  4. 深入了解line-height
  5. [Mugeda HTML5技术教程之7]添加动画
  6. Step one : 熟悉Unix/Linux Shell 常见命令行 (二)
  7. Serv-U FTP版本控制服务器 - 目录规范
  8. SAP MM GR-based IV, 无GR不能IV?
  9. 用js实现二维数组的旋转
  10. ActiveRecord Nested Atrributes 关联记录,对嵌套属性进行CURD
  11. LNMP安装201812012237
  12. windows7命令行终端获取管理员模式随笔
  13. Java虚拟机7:垃圾收集(GC)-2(并行和并发的区别)
  14. spark优化之数据结构(减少内存)
  15. [leetcode]Restore IP Addresses @ Python
  16. Django - Jsonp、CORS
  17. 《Java程序猿面试笔试宝典》之Java程序初始化的顺序是如何的
  18. 激活 IntelliJ IDEA
  19. Python语言特性
  20. HYSBZ - 2005 莫比乌斯反演

热门文章

  1. SpringMVC的映射器,适配器,控制器
  2. matplotlib中文乱码解决方法
  3. Postman中使用Postman Interceptor 发送带Cookie 的请求
  4. Extjs3.4 grid中添加一列复选框
  5. node的3大作用域
  6. 在eclipse中new 对象后怎么通过快捷键自动生成返回对象
  7. git失败案例
  8. 20135320赵瀚青LINUX第二章读书笔记
  9. Java 可重入锁
  10. linux top 各个标识的含义 详解