Javascript虽然不是面向对象语言,但是我们一样可以实现类的定义,工作中我们定义类一般用下面的方式,如下:
function Animal(name, species){
this.name = name;
this.species = species;
}
Animal.prototype.walk = function (){
return this.name + "是" + this.species + ",它会抓老鼠!";
}
Animal.prototype.swim = function () {
return this.name + "是" + this.species + ",它会游泳!";
}
var obj = new Animal("咪咪", "猫");//通过new关键词创建对象
console.log(obj.walk());
var obj = new Animal("旺旺", "狗");//通过new关键词创建对象
console.log(obj.swim());
</script>
运行结果:
这样的写法相对于其它传统面向对象语言来讲,是不是很不一样?
可喜的是2015年6月正式发布了ECMAScript 6(以下简称ES6)。它是JavaScript语言的下一代标准,ES6引入了Class这个概念,会后端开发的小伙伴都知道java和c#都用class来定义类,上面的代码用ES6改造后如下:
class Animal {
constructor(name, species) {//constructor是一个构造方法,用来接收参数
this.name = name;//this代表的是实例对象
this.species = species;
}
walk() {
return this.name + "是" + this.species + ",它会抓老鼠!";
}
swim() {
return this.name + "是" + this.species + ",它会抓看家!";
}
}
var obj = new Animal("咪咪", "猫");//通过new关键词创建对象
console.log(obj.walk());
var obj = new Animal("旺旺", "狗");//通过new关键词创建对象
console.log(obj.walk());
</script>
这种写法是不是更加清晰,更像是一种面向对象的语言。
但是需要注意javascript依然不是一个面向对象的语言,ES6中的class只是一个语法糖,底层的实现方式还是一样的,为什么我会这样说,运行下面的代码。
console.log(Animal===Animal.prototype.constructor);
运行结果:
不过很多的浏览器并不完全支持ES6,比如IE……
如果大家有更好的建议可以评论留言,欢迎大家转发。