本人学习过程中编写,定有美中不足,如果有错误,请您积极指正;如果有帮助,请不要吝啬您的赞美(点赞),欢迎各位大佬点赞评论。
首先建议没有javascript编程经验的同学,先了解原型与原型链https://www.cnblogs.com/loveyaxin/p/11151586.html
Es5中实例化类
let Animal = function (type){
this.type = type;
this.eat = function(){
console.log('I am eat');
}
}
let monkey = new Animal('monkey');
console.log(monkey);
然而这种方法有一个弊端,他会将实例化的对象都会添加一条eat属性。在实例化多个对象的时候并不是一个好的方法,于是我们对代码进行改写
let Animal = function (type){
this.type = type;
}
A
let monkey = new Animal('monkey');
console.log(monkey);
这种方法使得eat属性就会添加到实例化对象的_proto_属性之中,及原型链中。实际上并没有给该实例化对象赋予eat属性,而是为他的原型赋予eat属性,而当在该实例化对象中找不到eat属性时,就会顺着原型链去向他的上级查找,直到找到为止。
Es6中实例化类
class Animal{
constructor (type) {
this.type = type;
}
eat(){
console.log('I am eat');
}
}
let monkey = new Animal('monkey');
console.log(monkey);
es6中只需简单操作便可以达到与es5中同样的效果
注意:
此时我们输出Animal的类型我们会发现是函数类型,并不是class类型,换句话说,class是es6中用原型链生成类的语法糖(语法不一样,最后的本质是一样的)。
console.log(typeof Animal);