var a = {}
console.log(a.__proto__=== Object.prototype); // true
var A = function(){}
var a = new A();
console.log(a.__proto__=== A.prototype); // true
var a1 = {}
var a2 = Object.create(a1);
console.log(a2.__proto__ === a1); //true
JavaScript 只有一种结构:对象。每个实例对象( object )都有一个私有属性(称之为 __proto__ )指向它的构造函数的原型对象(prototype )。该原型对象也有一个自己的原型对象( __proto__ ) ,层层向上直到一个对象的原型对象为 null
。根据定义,null
没有原型,并作为这个原型链中的最后一个环节
console.log(a.__proto__ === a.constructor.prototype); //true
console.log(Person.prototype.constructor === Person); //true
console.log(Person.constructor.prototype === Person); //false
function Person() {}
console.log(Person.constructor.prototype ); // function () { [native code] }
console.log(Person.constructor ); // function Function() { [native code] }
console.log(Person ); // function Person() {}
普通对象与函数对象
var o1 = {};
var o2 =new Object();
var o3 = new f1();
function f1(){};
var f2 = function(){};
var f3 = new Function('str','console.log(str)');
console.log(typeof Object); //function
console.log(typeof Function); //function
console.log(typeof f1); //function
console.log(typeof f2); //function
console.log(typeof f3); //function
console.log(typeof o1); //object
console.log(typeof o2); //object
console.log(typeof o3); //object
普通对象的constructor 指向function Object() { [native code] }
函数对象的constructor 指向function Function() { [native code] }
function Person(name, age, job) {
this.name = name;
this.age = age;
this.job = job;
this.sayName = function() { alert(this.name) }
}
var person1 = new Person('Nid', 25, 'Killer');
var person2 = new Person('Hogg', 23, 'Doctor');
console.log(person1.constructor === Person); //true
console.log(person2.constructor === Person); //true
var b = new Array();
b.constructor === Array;
b.__proto__ === Array.prototype;
var c = new Date();
c.constructor === Date;
c.__proto__ === Date.prototype;
var d = new Function();
d.constructor === Function;
d.__proto__ === Function.prototype;