一、js构造函数
let myCanvas = this.$refs.myCanvas
var ctx = myCanvas.getContext('2d')
function Circle (x, y, r, color) {
this.x = x
this.y = y
this.r = r
this.color = color
}
Circle.prototype.render = function () {
ctx.beginPath()
ctx.arc(this.x, this.y, this.r, 0, Math.PI * 2, true)
ctx.fillStyle = this.color
ctx.fill()
}
Circle.prototype.update = function () {
this.x += 1
}
var yuan = new Circle(100, 100, 1, 'red')
var timer
clearInterval(timer)
timer = setInterval(() => {
// ctx.clearRect(0, 0, 800, 600)
yuan.update()
yuan.render()
if (yuan.x === 800) {
clearInterval(timer)
}
}, 15)
二、class基本语法
let myCanvas = this.$refs.myCanvas
var ctx = myCanvas.getContext('2d')
class Circle {
constructor (x, y, r, color) {
this.x = x
this.y = y
this.r = r
this.color = color
}
render () {
ctx.beginPath()
ctx.arc(this.x, this.y, this.r, 0, Math.PI * 2, true)
ctx.fillStyle = this.color
ctx.fill()
}
update () {
this.x += 1
}
}
const yuan = new Circle(100, 100, 1, 'red')
var timer
clearInterval(timer)
timer = setInterval(() => {
// ctx.clearRect(0, 0, 800, 600)
yuan.update()
yuan.render()
if (yuan.x === 800) {
clearInterval(timer)
}
}, 15)
三、继承
1、构造函数形式的继承
//动物
function Animal(){
this.eat = function (){
console.log('Animal eat')
}
}
//狗
function Dog() {
this.bark = function (){
console.log('Dog bark')
}
}
Dog.prototype = new Animal()
var hashiqi = new Dog()
hashiqi.bark()
hashiqi.eat()
2、Class继承
class Animal {
constructor(name){
this.name = name
}
eat(){
alert(this.name + ' eat')
}
}
class Dog extends Animal {
constructor(name){
super(name) //super就是被继承的对象的constructer
}
say(){
alert(this.name + ' say')
}
}
const dog = new Dog('哈士奇')
dog.say()
dog.eat()
四、总结
1、class在语法上更贴近面向对象的写法。
2、class实现继承更加易读易理解。