》》每一个函数都有一个prototype属性
》》prototype的所有属性和方法都会被构造函数的实例继承
》》这意味着我们可以将那些不变(公共)的属性和方法直接定义在prototype对象属性上
》》prototype就是调用构造函数所创建的那个实例对象的原型 (proto)
》》prototype可以让所有对象实例共享它所包含的属性和方法。也就是说,不必在构造函数中定义对象信息,而是可以直接将这些信息添加道原型中
》》实例对象与原型之前的连接,叫做原型链
》》每个对象都有一个proto属性,指向创建它的构造函数的原型
》》如Person.prototype ,Function.prototype,Object.prototype 其实也是一个对象
function Person(){ //Person构造函数
}
var person = new Person(); //创建一个实例
console.log( person._proto_ === Person.prototype ); //true
console.log(Person.__proto__ === Function.prototype); //true
》》每个原型都有一个constructor属性 指向关联的构造函数
function Person ( ) { }
console.log( Person === Person . prototype . constructor ); //true
//顺便学习一个ES5的方法,可以获得对象的原型
console.log( Object . getPrototypeOf(person) === Person . prototype )
》》console.log( person.constructor === Person ); //true
console.log( person .constructor === Person .prototype .constructor );//true
function Person(){
}
var person=new Person();
console.log(person.__proto__ === Person.prototype);// true
console.log(person.constructor === Person); //true
console.log(Person.__proto__ === Function.prototype); //true
//console.log(person.prototype.constructor); //
console.log(Person.prototype.constructor === Person); //true
console.log(Function.prototype.__proto__ == Object.prototype); //true
console.log( Function.prototype.__proto__.__proto__ === null );//true
console.log( person.__proto__.__proto__.__proto__ === null );//true
console.log( person.__proto__.__proto__ === Object.prototype );//true