知道了prototype这个原型(也叫原型属性、原型对象,不要搞混了,原型、原型属性、原型对象都是同一个东西),我们还需要知道__proto__和constructor两个属性。
先说说constructor属性,这个属性是函数独有的,而且是存在于原型prototype中,constructor指向函数对象。
function User() {};
console.log(User.prototype);

__proto__也叫隐式原型,指向构造函数的prototype。
function User() {
}
User.prototype.name = 'wade';
var user = new User();
console.log(User.prototype);
console.log(user.proto);

var time = new Date();
console.log(Date.prototype);
console.log(time.proto);
console.log(time.proto === Date.prototype);
User和Date叫构造函数,user和time是实例对象,实例对象的隐式原型__prpto__指向创建出实例的构造函数的显示原型prototype。
除了null和undefined之外,所有的数据类型都有隐式原型__proto__
var a = 10;
var b = '10';
var c = true;
var d = {};
console.log(a.proto);
console.log(b.proto);
console.log(c.proto);
console.log(d.proto);

都是指向自己的数据类型,Number、String、Boolean,所以通过__proto__,实例对象可以使用构造函数的所有方法和属性。
有一点要特别注意,构造函数的隐式原型__proto__在显示原型prototype上。虽然也可以打印出数据。
function User() {}
console.log(User.prototype);
console.log(User.proto);

欢迎关注Coding个人笔记 订阅号