什么时候创建了原型对象
我们创建的每一个函数,不光是构造函数,都会有一个prototype属性,当我们创建了一个函数/声明了一个函数,它就会根据一组特定的规则为该函数创建一个prototype属性指向的对象。
原型对象
原型对象就是我们创建了一个新函数的时候,自动创建的一个对象,当我们仅仅是创建了函数的时候,这个原型对象是这样的:
原型对象是会自动获得一个constructor属性,这个属性指向我们创建的函数。
原型对象还有很多从Object继承来的属性和方法。
但是当我们创建了一个新实例后,该实例内部将包含一个指针,指向构造函数的原型对象~ [[prototype]]
[[prototype]]
这个是一个指针,这指针指向原型对象。 脚本没有标准的方式访问这个[[prototype]],但FireFox Safari Chrome 都支持一个属性称为__proto__
ppt2.__proto__
真正重要的是:连接存在于实例和原型对象之间,而不是实例与构造函数。
Person–> Person.prototype <–person1
构造函数的prototype属性指向原型对象,原型对象的constructor属性又指回了构造函数!
我们访问原型中的方法是通过搜索查找对象属性的过程实现的。
isPrototypeOf
判断某个实例和某个原型的对应关系。
Person.prototype.isPrototypeOf(person1);//true
它就是判断实例的[[prototype]]是否指向调用这个方法的对象。
Object.getPrototypeOf
ES5新方法,用来获取一个实例的原型。
Object.getPrototypeOf(person1)==Person.prototype;
返回的原型,可以访问这个原型中的属性方法值。
我们在使用原型继承的时候会用到这个方法。