文章目录
#1.原型(prototype)的概念
但是需要注意的是:使用函数中的方法或者属性时,寻找的顺序不同!先寻找函数本身属性或方法,再寻找函数原型。如果函数本身有需要使用的方法或属性,就直接使用,不再继续向函数原型寻找,如果没有找到,才会向函数原型中查找。
#2.结合代码,原型图形分析
//1.先创建一个函数,查看函数中是否有函数原型(prototype),通过__proto__属性访问
//__proto__这个属性,是由浏览器提供的一种访问函数原型(prototype)的一个隐含属性
function mycalss(){
}
var mc=new mycalss(); //通过构造函数创建,
console.log(mc.__proto__); //通过隐含属性访问函数原型,打印结果是object,证明确实有这个属性
var mc2=new mycalss(); //通过构造函数创建
console.log(mc2.__proto__); //通过隐含属性访问函数原型,打印结果是object,证明确实有这个属性
var mc3=new mycalss();
//2.使用函数原型
mycalss.prototype.a="123"; //使用原型向原函数中添加属性
console.log(mc.a); //打印结果是123,证明mc对象中可以访问到mycalss原函数中的原型
console.log(mc2.a); //打印结果是123,证明mc2对象中可以访问到myclass原函数中的原型
console.log(mc.a===mc2.a) //打印结果是true,证明mc对象中使用的原型和mc2对象使用的函数原型相同
//3.优先使用对象自身属性
mc3.a="456"; //向mc3的对象中,添加一个属性,和函数原型相同,但是值不同
console.log(mc3.a); //此时的打印结果是456,并不是函数原型中的123,证明使用对象时,优先在对象本身内查找,
//存在就使用,不再向prototype中查找
图像理解如下图:
#3.原型的使用场景
我相信看了上面的代码和图形解析,你已经了解了原型的使用,以及原型是一个公共区域。所以当你需要多个对象使用到同一种属性或方法时,直接使用原型进行添加。
如果某一些不需要使用,可以通过向自身对象添加相应的属性或方法。使用时就会优先使用到自身的属性或方法。
#4.通过hasproperty检查属性和方法是否属于原型。
代码如下:
//4.hasOWnproperty使用
function mycalss(){
}
mycalss.prototype.a="123"; //向原型中添加属性
var fn=new mycalss();
fn.b="456"; //向对象中添加熟悉
console.log(fn.hasOwnProperty("b")); //打印true,证明对象中含有该属性
console.log(fn.hasOwnProperty("a")); //打印false,证明对象中不含有该属性