原型
2019-06-28 本文已影响1人
Hello杨先生
前提:原型是一个对象,其他对象可以通过他来实现属性继承,除了prototype
注意:大多情况下proto可以理解为constructor的原型,表示为proto === constructor.prototype
/*
输出原型
*/
function add(){
alert("111");
}
console.dir(add);
prototype: {constructor: ƒ}
// prototype是函数才有的属性
var arr = [];
console.dir(arr);
// //__proto__: Array(0) //prototype是proto的原型
// prototype: [constructor: ƒ, concat: ƒ, copyWithin: ƒ, fill: ƒ, find: ƒ, …]
// constructor: ƒ Array() proto是构造器的原型
//__proto__ 是每个对象都有的属性 ,不是一个规范属性,质数部分浏览器实现了此属性
/**/
//对应的标准属性=任何浏览器都识别的属性=[[Prototype]]
var a ={};
console.log(a.prototype);//undefined
console.log(a.__proto__);//Object
var b = function (){
alert("bbb");
}
console.log(b.prototype);//Object
console.log(b.__proto__);//ƒ () { [native code] }
原型的作用
共享数据,节省内存空间
构造原型和实例的关系
构造函数创建实例对象
构造函数里面的prototype属性指的是原型对象
原型对象里面有一个constructor构造器
constructor指向的是自己的构造函数
原型对象里面的方法被实例对象共享
实例对象里面有proto属性
proto指向他所在的构造函数的原型对象
所以实例对象能访问到原型对象里面的方法
构造函数可以实例化对象
构造函数中有一个属性叫prototype,是构造函数的原型的对象
构造函数的原型对象(prototype)中有一个构造器constructor
constructor构造器指向的是自己所在的原型对象所在的构造函数
实例对象的原型对象(__proto__)(若看到某一对象中有__proto__,那么当前对象就是实例对象 )
实例对象的原型对象指向的是该构造函数的原型对象
构造函数的原型对象(prototype)中的方法是可以被实例对象直接访问的
构造原型和实例的关系.png