构造函数
我们可以通过构造函数的方式来创建对象
使用构造函数我们可以提前定义所有的实例化对象共有的属性
eg:
![](https://img.haomeiwen.com/i3600793/5b3a4a0782eb06cd.png)
使用构造函数的另外一个好处:它可以在创建对象时接收一些参数。来生成一些某个对象特殊的属性。
eg:
![](https://img.haomeiwen.com/i3600793/7275207d64eef070.png)
依照惯例,我们应该将构造函数的首字母大写,以便显著的区别于其他一般函数。另外,如果我们在调用一个构造函数时忽略了new操作符,尽管代码不会出错,但他可能会很怪异。因为他的this指向了全局对象
构造器属性(constructor)
每个对象都有一个constructor指向创建这个对象的构造函数
当我们创建对象时,实际上同时也赋予了该对象一种特殊的属性----构造器属性(constructor propetry)。该属性实际上是一个指向用于创建该对象的构造函数的引用。如下图
![](https://img.haomeiwen.com/i3600793/a1ef33bf39920c5d.png)
由于构造器属性(constructor)所引用的是一个函数,因此我们也可以利用它来创建一个其他的新对象,也就是无论对象h2有没有被创建,我们都可以用它来创建一个新对象
![](https://img.haomeiwen.com/i3600793/b9dd14c969e6196b.png)
另外,如果对象是通过对象文本标识法创建的,那么他就是由内建构造器Object()函数所创建的,也就是他的构造函数是Object():
![](https://img.haomeiwen.com/i3600793/b16d6c5b5a636ec3.png)
函数也是对象,函数的constructor指向Function()
![](https://img.haomeiwen.com/i3600793/e42e7064accf0d81.png)
instanceof操作符(实例)
通过instanceof操作符,我们可以测试一个对象是不是由某个指定的构造器函数所创建的,即该对象是否是该构造函数的实例:
![](https://img.haomeiwen.com/i3600793/4bbdb292fddcb635.png)
返回对象的函数
除了使用new操作符来调用构造器函数之外,我们也可以不使用new操作符,只使用一般的函数来创建对象。我们只需要把对象作为函数的返回值就可以了:
![](https://img.haomeiwen.com/i3600793/76ec10d6e91f4e4f.png)
![](https://img.haomeiwen.com/i3600793/f649ac8e4bdb1d9a.png)
需要注意,此时a的constructor是Object()函数,a并不是A的实例
再看这种情况:构造器函数同时返回对象
![](https://img.haomeiwen.com/i3600793/9fd9752e6a679020.png)
可以看到c看上去是通过new C()得来的,然而构造器返回的不再是包含属性a的this对象,并且c的构造函数并不是C,对象c里面也没有一个属性a。c的实例函数是Object。但是,也只有在函数的返回值是一个对象时才会发生,如果我们返回的不是一个对象,该构造器将会照常返回this
![](https://img.haomeiwen.com/i3600793/33dac615e1143fe4.png)
网友评论