function Foo() {}; var f1 = new Foo;
用来初始化新建立的对象的函数是构造函数。上例中Foo()就是构造函数函数
经过构造函数的new操做符建立的对象是实例对象。一个构造函数能够构造多个实例对象prototype
function Foo() {}; var f1 = new Foo; var f2 = new Foo; console.log(f1 === f2); //false
构造函数有一个prototype属性,指向实例对象的原型对象。构造函数实例化的多个对象具备相同的原型对象,可用原型对象来实现继承code
function Foo() {}; Foo.prototype.a = 1; var f1 = new Foo; var f2 = new Foo; console.log(Foo.prototype.a); //1 console.log(f1.a); //1 console.log(f2.a); //1
原型对象有一个constructor属性,指向该原型对象对应的构造函数对象
function Foo() {}; console.log(Foo.prototype.constructor === Foo) //true
因为实例对象可用继承原型对象的属性,因此实例对象也拥有constructor属性,一样指向原型对象对应的构造函数继承
function Foo() {}; var f1 = new Foo; console.log(f1.constructor == Foo); //true
实例对象有一个proto属性,指向该实例对象对应的原型对象ip
function Foo() {}; var f1 = new Foo; console.log(f1.__proto__ === Foo.prototype); // true
typeof null === "Object"
缘由是在js中,不一样对象在底层都是以二进制标识,二进制前三位若是都是0的话就会被断定为Object类型,null的二进制都是0,因此返回Object原型