以为是ECMAScript的非正式概述--并没有描述语言的所有部分。此概述不是标准的一部分。 ECMAScript是基于对象的:通过对象提供基础语言和宿主资源。ECMAScript程序是通信对象(communicatingobjects)的集群,在ECMAScript中,对象是由0个或者多个属性的集合,每个属性由特性(attributes)来决定这个属性如何被使用—例如,当Writable特性(Writable attribute)被设置为false时,任何修改该属性(property)的尝试都会失败。Properties包括其他对象(objects),原始值(primitive values)或函数(functions)。原始值是以下内置类型之一的成员:Undefined,Null,Boolean,Number,String和Symbol。对象是的内置类型Object的成员,而函数是可调用的对象。通过属性与对象关联的函数称为方法。
ECMAScript还定义了一组内置运算符。ECMAScript运算符包括各种一元运算符,乘法运算符,加法运算符,按位移位运算符,关系运算符,相等运算符,二进制按位运算符,二进制逻辑运算符,赋值运算符和逗号运算符。
大型ECMAScript程序由模块支持,这些模块允许将程序分为多个语句和声明序列。每个模块都明确标识其使用的声明,这些声明需要由其他模块提供,以及哪些声明可供其他模块使用。
ECMAScript 的语法很像java,但是它书写比较宽泛,不那么严格。例如一个变量不需要声明和类型定义,函数(function)不需要先声明再使用。
4.2.1 对象 即使ECMAScript不像C ++, Smalltalk, 和Java那样使用class来定义类。相反,可以通过各种方式创建对象,包括通过文字表示法或通过构造函数创建对象,然后通过为其属性分配初始值来执行初始化全部或部分对象的代码。每个构造函数都是一个函数,该函数具有名为“prototype”的属性,该属性用于实现基于原型的继承和共享属性。 通过在新表达式中使用构造函数来创建对象。 例如,new Date(2009,11)创建一个新的Date对象。 不使用new调用构造函数的结果取决于构造函数。 例如,Date()生成当前日期和时间的字符串表示形式,而不是对象。
function Car(){
}
构造函数含有[[prototype]]

不用new调用构造方法 返回的是undefined

例子
function Car1(){
return 1;
}



小总结:
- 不适用new 调用构造方法 返回值 取决与函数的return值,如果没有return 返回undefined;
- 使用new调用返回的是个对象,并且含有__proto__属性;
构造函数创建的每个对象都有对其构造函数的“ prototype”属性值的隐式引用(称为对象的原型)。 此外,原型可能对其原型具有非null的隐式引用,依此类推;等等。 这称为原型链。 当引用对象中的属性时,该引用就是包含该名称的属性的原型链中第一个对象中该名称的属性。 换句话说,首先检查直接提到的对象是否具有这种属性; 如果该对象包含命名属性,那么该引用就是该属性; 如果该对象不包含命名属性,则接下来检查该对象的原型; 等等。
在一个基于类的面向对象的语言中,状态由实例承载,方法由类承载,继承的只是结构和行为。而在ECMAScript 中,状态和方法都会被对象(objects)承载,结构、行为和状态都能被继承。
Figure 1: Object/Prototype Relationships

所有的对象都不直接包含由其prototype包含的特定的属性和值, 图1说明了这些:
CF是一个构造函数(同时也是一个对象),五个对象通过new表达式由其创建,分别为cf1、cf2、cf3、cf4和cf5,它们每个都有2个属性,分别为q1和q2。虚线代表了prototype的隐式关系,比如cf3的prototype是CFp,构造函数CF有2自己的个属性P1和P2,它们对于CFp、cf1、cf2、cf3、cf4和cf5都是不可见的。CFp的属性CFp对于cf1、cf2、cf3、cf4和cf5是共享的(但对CF不是)在CFp的prototype链里没有q1、q2或CFP1,因为在CF和CFp中没有prototype链。
.不像基于类的面向对象的语言,在JavaScript里属性可以动态的被加载进去。这就是说构造方法不需要定义所有的属性,在上面的图中,可以通过加一个新的属性给CFp来加一个新的属性给 cf1、cf2、cf3、cf4和cf5。