JS的原型分成两类:隐式原型和显示原型
显示原型只有函数有,隐式原型所有对象都有
_proto_是实现继承的原理, 通过_proto_指向实现继承
1.默认情况
function person(name) {
this.name = name;
}
var person1 = new person();
person1.prototype._proto_ = person.prototype
person.prototype._proto_ = Object.prototype
2.其他情况
function Bar(){}
function Foo(){}
Foo.prototype = new Bar() (通过new 实例构造函数实现继承)
Foo.prototype.__proto__ === Bar.prototype
================================================================
function Foo(){}
//我们不想让Foo继承谁,但是我们要自己重新定义Foo.prototype
Foo.prototype = {
a:10,
b:-10
}
//这种方式就是用了对象字面量的方式来创建一个对象
Foo.prototype.__proto__ === Object.prototype
console.log(Foo.prototype.constructor); //[Function: Object]
总结:
也就是说,通过对象字面量构造出来的对象,其__proto__
都是指向Object.prototype
通过new操作符调用的函数就是构造函数。由构造函数构造的对象,其__proto__
指向其构造函数的原型对象。