11.new关键字
(new
operator) 新运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象类型之一。
new操作符具体干了些什么呢:
- 创建了一个空对象,并且this变量引用该对象,同时还继承了该函数的原型
- 属性和方法被加入到this引用的对象中
- 新创建的对象由this所引用,并且最后隐式的返回this。
创建一个对象类型需要创建一个指定了名称和属性的函数;其中这些属性可以指向它本身,也可以指向其他对象,看下面的例子:
当代码 new foo(...)
执行时:
- 一个新对象被创建。它继承自
foo.prototype
. - 构造函数
foo
被执行。执行的时候,相应的传参会被传入,同时上下文(this)会被指定为这个新实例。 new foo
等同于new foo()
, 只能用在不传递任何参数的情况。 - 如果构造函数返回了一个“对象”,那么这个对象会取代整个
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