ITEEDU

javascript中new关键字的作用

创建具备特定类型的对象可以通过使用new关键字用构造函数模式来完成。

function ClassA(){
 this.name=" ClassA ";
}
var p = new ClassA ();

在这个过程中,相当于以ClassA ()为“模版”创建了一个新对象p,它具备ClassA构造器中的成员变量和构造器原型。并且ClassA将this设置为p。

过程模拟:

var p = {};
 ClassA.apply(p);
 p.__proto__= ClassA.prototype;

在调用构造函数的过程中会经历以下4个步骤:

  1. 创建一个新对象
  2. 将构造函数的作用域赋给新对象(因此this指向这个新对象)
  3. 执行构造函数中的代码(为这个新对象添加属性)
  4. 返回新对象

接下来说说构造函数里包含return的情况

构造函数在没有指定返回值的情况下,默认会返回新对象实例。

如果指定的返回值是基本数据类型的话,仍然会返回新对象实例。

function A(){
 this.x=3;
 return "OK";
}
var a = new A();
alert(a instanceof A )// true;
alert("x" in a )// true

如果指定返回对象了的话,被返回的对象就成了指定的对象值。

在这种情况下,this值所引用的对象就被丢弃了。

function B(){
    this.x=3;
    return Object("OK");
}
var b = new B();
alert("x" in b )//false
alert(b instanceof B )//false
alert(b instanceof String )//true