对象原型`__proto__`隐式原型
隐式原型是利用__proto__
属性查找原型,这个属性 指向 当前对象的构造函数的原型对象,这个属性是对象类型数据的属性,所以可以在实例对象上面使用。
( 隐式原型 出现 实例对象上, 用它 追溯 原型。)
javascript对象中的__proto__
属性 (隐式原型)
<script>
// javascript对象中的`__proto__`属性 (隐式原型)
{
var o1 = {
name:'jerry',
age:19,
}
// 查看对象(实例化对象)
console.log(o1);
// 查看对象上的隐式原型__proto__
console.log(o1.__proto__);
// o1.__proto__ 和Object.prototype 是同一个内容
console.log(o1.__proto__ === Object.prototype);
}
{
// js内置顶层函数对象
var date = new Date();
console.dir(date)
// 查看对象(实例化对象)
console.log(date.__proto__);
console.log(date.__proto__ === Date.prototype);
}
{
// 每个实例对象都会有`__proto__`属性,其被称为隐式原型
function Person(name,age){
this.name = name;
this.age = age;
}
// 实例化对象
// Person() 构造函数有一个属性是原型
var p1 = new Person('老李',88);
// 实例化指向
console.log(p1.__proto__);
// 原型指向
console.log(Person.prototype);
console.log(p1.__proto__ === Person.prototype);
}
</script>
预览效果
constructor、prototype和proto之间的关系
原型中的constructor属性
原型对象(原型)来说,它有个constructor属性,指向它的构造函数 。
constructor
属性是对象拥有的属性,它是从一个对象指向一个函数,含义就是指向该对象的构造函数,每个对象都有构造函数(本身拥有或继承而来)
<script>
// 原型中的constructor属性
// 构造函数
function Foo(name){
this.name = name;
// 在原型上定义一个共享属性
Foo.prototype.color = 'pink';
}
// 实例化对象
var f1 = new Foo('云朵');
console.log(f1);
// 因为实例化对象的__proto__属性 指向的是 构造函数的原型
// 所以这样写
console.log(f1.__proto__ === Foo.prototype);
// 下面这样写是通过继承的方式写的
// 因为实例化对象可以共享使用原型上的 属性和方法
console.log(f1.constructor);
</script>
预览效果