11.new关键字


(newoperator) 新运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象类型之一。

new操作符具体干了些什么呢:

  1. 创建了一个空对象,并且this变量引用该对象,同时还继承了该函数的原型
  2. 属性和方法被加入到this引用的对象中
  3. 新创建的对象由this所引用,并且最后隐式的返回this。

创建一个对象类型需要创建一个指定了名称和属性的函数;其中这些属性可以指向它本身,也可以指向其他对象,看下面的例子:

当代码 new foo(...) 执行时:

  1. 一个新对象被创建。它继承自foo.prototype.
  2. 构造函数 foo被执行。执行的时候,相应的传参会被传入,同时上下文(this)会被指定为这个新实例。 new foo 等同于 new foo(), 只能用在不传递任何参数的情况。
  3. 如果构造函数返回了一个“对象”,那么这个对象会取代整个new出来的结果。如果构造函数没有返回对象,那么new出来的结果为步骤1创建的对象,ps:一般情况下构造函数不返回任何值,不过用户如果想覆盖这个返回值,可以自己选择返回一个普通对象来覆盖。当然,返回数组也会覆盖,因为数组也是对象。
function Car() {}
 car1 = new Car()

 alert(car1.color)           // undefined

 Car.prototype.color = null
 alert(car1.color)           // null

 car1.color = "black"
 alert(car1.color)           // black

参考:

http://www.infoq.com/cn/articles/javascript-instantiation-and-inheritance

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/new

results matching ""

    No results matching ""