二、构造函数

2017-02-13  本文已影响8人  幸福幸福幸福
构造函数

我们可以通过构造函数的方式来创建对象
使用构造函数我们可以提前定义所有的实例化对象共有的属性
eg:


使用构造函数的另外一个好处:它可以在创建对象时接收一些参数。来生成一些某个对象特殊的属性。
eg:


依照惯例,我们应该将构造函数的首字母大写,以便显著的区别于其他一般函数。另外,如果我们在调用一个构造函数时忽略了new操作符,尽管代码不会出错,但他可能会很怪异。因为他的this指向了全局对象

构造器属性(constructor)

每个对象都有一个constructor指向创建这个对象的构造函数
当我们创建对象时,实际上同时也赋予了该对象一种特殊的属性----构造器属性(constructor propetry)。该属性实际上是一个指向用于创建该对象的构造函数的引用。如下图


由于构造器属性(constructor)所引用的是一个函数,因此我们也可以利用它来创建一个其他的新对象,也就是无论对象h2有没有被创建,我们都可以用它来创建一个新对象


另外,如果对象是通过对象文本标识法创建的,那么他就是由内建构造器Object()函数所创建的,也就是他的构造函数是Object():


函数也是对象,函数的constructor指向Function()


instanceof操作符(实例)

通过instanceof操作符,我们可以测试一个对象是不是由某个指定的构造器函数所创建的,即该对象是否是该构造函数的实例:


返回对象的函数

除了使用new操作符来调用构造器函数之外,我们也可以不使用new操作符,只使用一般的函数来创建对象。我们只需要把对象作为函数的返回值就可以了:



需要注意,此时a的constructor是Object()函数,a并不是A的实例

再看这种情况:构造器函数同时返回对象


可以看到c看上去是通过new C()得来的,然而构造器返回的不再是包含属性a的this对象,并且c的构造函数并不是C,对象c里面也没有一个属性a。c的实例函数是Object。但是,也只有在函数的返回值是一个对象时才会发生,如果我们返回的不是一个对象,该构造器将会照常返回this


上一篇 下一篇

猜你喜欢

热点阅读