[转载] Javascript之构造函数

一.构造函数

如果函数或者方法的调用之前加上new关键字,他就构成了构造函数的调用.,

构造函数的调用和普通函数,方法的调用在实参处理,调用上下文和返回值方面有不同

(1).实参处理不同

凡是没有形参的构造函数调用都可以省略圆括号

例子1-1:

[javascript][/javascript] view plaincopy

  1. var o = new Object();  
  2. /等价于var o = new Object;  

 

(2)调用上下文的不同

调用构造函数创建一个新的空对象,这个对象继承自构造函数的prototype(原型).构造函数试图初始化这个新对象,并把这个新对象当做构造函数的调用上下文,所以在构造函数中this关键字可以用来引用这个新对象,也就能够在构造函数中初始化这个新对象.

例子1-2:

[javascript][/javascript] view plaincopy

  1. function A()  
  2. {  
  3. this.a = 123;  
  4. }  
  5. var b = new A();//此时调用构造函数A,this指向的就是b对象(调用上下文).  
  6. alert(b.a);  

(3)返回值不同

构造函数通常不使用return关键字调用完毕之后会返回一个对象(就是新创建的这个对象)

二.this关键字

this是一个关键字,不是变量也不是属性.

this关键字没有作用域的限制,他只有下面几种情况

(1)一个函数被当做方法调用,则函数中的this指向的是调用它的对象

(2)一个函数被当做函数调用,则函数中的this指向的全局对象(非严格模式)或者是undefined(严格模式下)

  特别注意:即使这个函数是个嵌套函数,this的指向也是和上面说的一样

(3)函数被当做构造函数调用,this就指向构造函数创建的新对象

例子2-1:

[javascript][/javascript] view plaincopy

  1. var a = {};//创建一个新对象  
  2. function A()  
  3. {  
  4. alert(this === a)  
  5. }  

 

a.func = A;//a对象添加一个func属性,值为A函数;

a.func();//A函数当做方法调用,this指向的就是a对象 所以返回true

A();//A函数当做函数调用 this指向的就是全局对象所以返回false

三.instanceof操作符

实例对象 instanceof构造函数

例子3-1:

[javascript][/javascript] view plaincopy

  1. <span style=“font-size:18px;”var a = new Array();  
  2. alert(a instanceof Array);//返回true  
  3. alert(a instanceof Object);//返回true  
  4. Alert(a instanceof String);//返回false  
  5.  </span>  

 a instanceof f;

理解instanceof是如何工作的:

(1)原型链:原型链简单的认为就是一个对象继承的原型对象组成的“;

   a 的原型链上就有 Array.prototype Object.prototype

(2)instanceof如何工作:

首先计算构造函数的原型对象 f.prototype,然后就在对象a的原型链上查找f.prototype,

如果找到了,那么a就是f(或者f的父类)的实例,返回true;

如果找不到,那么a就不是f(或者f的父类)的实例,返回false;

特别注意:

(1)所有的对象都是Object的实例

因为所有的对象的原型链上都有Object.prototype;

(2)基本类型这个时候有些不同

[javascript][/javascript] view plaincopy

  1. <span style=“font-size:18px;”>alert(“fsa” instanceof String);//返回false  
  2. </span>  

Leave a Reply