class Monster{
constructor(name,hp){
this.name=name;
this.hp=hp
this.g=function(){
console.log("gg");
}
}
f(){
console.log("fff");
}
}
let o=new Monster(“a”,12)
注意:1.任意一个(构造)函数都有与之相对应的原型对象,可以通过constructor访问,而原型对象可以通过prototype访问构造函数。
2.在本例子里,原型对象Monster和构造函数Monster合并成为类,但一般又称原型对象Monster为类,未有准确定义,注意区分。
3.直接打印构造函数Monster
console.log(Monster)出来的是constructor里面的代码内容,不包括原型里代码内容
同时console.log(typeof(Monster))//输出:function
console.log(typeof(o.proto))//输出:object
注意:如果
,输出undefined与4156
因为Monster.a是构造函数,只是挂载了一个a在Monster上而非包含a,通过此构造函数创建的对象都没有包含a。并没有原型对象上属性的改变。
4.在js中,对象如果在自己的这里找不到对应的属性或者方法,那就会继续往原型对象上去找,若原型对象没有,则沿着原型对象的原型对象去找,整个查找过程都是顺着proto属性,一步一步往上查找,形成了像链条一样的结构,这个结构,就是原型链。所以,原型链也叫作隐式原型链。
5.函数也是一种对象
显式原型与隐式原型
1. 显示原型
显示原型就是利用prototype属性查找原型,只是这个是函数类型数据的属性。
2. 隐式原型
隐式原型是利用proto属性查找原型,这个属性指向当前对象的构造函数的原型对象,这个属性是对象类型数据的属性。