所有的对象都有"proto"属性,该属性对应该对象的原型
所有的函数对象都有"prototype"属性,该属性的值会被赋值给该函数创建的对象的"proto"属性
所有的原型对象都有"constructor"属性,该属性对应创建所有指向该原型的实例的构造函数
函数对象和原型对象通过"prototype"和"constructor"属性进行相互关联
proto的指向取决于对象创建时的实现方式
三种指向:
1、字面量的方式
2、构造器方式
3、object.create
//1、字面量的方式
var a = {};
console.log(a.__proto__);//Object
console.log(a.__proto__=== a.constructor.prototype); //true
大多数情况下该元素的原型===该元素的构造器的原型
// 2、构造器方式
var A = function () {}
var a = new A(); //new出来一个新的对象,这个对象变相的继承A的所有属性方法
//a.__proto__ ->指向 -> A.prototype
console.log(a.__proto__);//object
console.log(a.__proto__ === a.constructor.prototype); //true
// 3、object.create
var a1 = {
a: 1
}
var a2 = Object.create(a1); //创建和a1一模一样的对象并赋值给a2
console.log(a2.__proto__); ////Object//a: 1
console.log(a2.constructor.prototype);
console.log(a2.__proto__ === a2.constructor.prototype); //false
console.log(a2.__proto__ === a1);//true 指向创建对象的本身
网友评论