谈谈你对原型与原型链的理解
答案解析:
原型
所有引用类型都有一个__proto__(隐式原型)属性,属性值是一个对象;
所有函数都有一个prototype(显示原型)属性,属性值是一个对象;
所有引用类型的__proto__属性指向它构造函数的prototype,它们其实是同一个对象(下列代码最后一行)。
//定义一个构造函数
functionDemo(){
this.a=1
this.b=2
}
//创建一个Demo的实例对象
constd=newDemo()
console.log(Demo.prototype)//显示原型属性
console.log(d.__proto__)//隐式原型属性
console.log(Demo.prototype===d.__proto__)//返回ture
一般通过构造函数.prototype来追加属性、方法,实例对象就可以访问了。
好处是当一个构造函数有多个实例对象时,所有实例对象都可以使用,实现代码的复用。
//通过显示原型属性操作原型对象,追加一个x属性
Demo.prototype.x=
console.log(d.x)//返回
原型链
刚刚说过,原型的属性值是一个普通的对象,那么这个对象又会有__proto__属性,只要有对象就会又有__proto__属性…
那什么时候到头呢?
我们知道,js基本数据类型中的引用类型只有object。所以,最后会到object的__proto__,其值为null。
当一个实例对象调用属性或方法时,如果自身没有,则会去原型上找,原型没有则去原型的原型上找,一层一层向上查找形成一个链式结构,称为原型链。
坚持每天花20分钟来学习与思考
不要等到找工作时才狂刷题
提倡每日学习
不要慌不要慌
太阳下了有月光
—END—扫码