【new operator】
When the code new Foo(...)
is executed, the following things happen:
- A new object is created, inheriting from
Foo.prototype
.(即新建对象的 __prototype__ 属性与 Foo.prototype 一样) - The constructor function F
oo
is called with the specified arguments andthis
bound to the newly created object.new Foo
is equivalent tonew
Foo
()
, i.e. if no argument list is specified, Foo
is called without arguments. - The object returned by the constructor function becomes the result of the whole
new
expression. If the constructor function doesn't explicitly return an object, the object created in step 1 is used instead. (Normally constructors don't return a value, but they can choose to do so if they want to override the normal object creation process.)
You can add a shared property to a previously defined object type by using theFunction.prototype
property. This defines a property that is shared by all objects created with that function, rather than by just one instance of the object type. The following code adds a color property with value null
to all objects of type car
, and then overwrites that value with the string "black
" only in the instance object car1
.
【Function】
Function
objects inherit from Function.prototype
. Function.prototype
cannot be modified. In JavaScript every function is actually a Function
object.
prototype和__proto__是完全不一样的两个东西。
__proto__用于实现继承。