JavaScript对象入门指南(3)

JavaScript对象入门指南


  如图,创建的新的Teacher()构造器只有一个空的原型属性,则需从Person()的原型prototype中继承方法:

Teacher.prototype = Object.create(Person.prototype);

JavaScript对象入门指南


  如图,我们又遇到了个问题,由于我们创建Teacher的prototype的方式,Teacher()构造器的prototype属性执行了Person(),因此,我们需要设置指向Teacher:

Teacher.prototype.constructor = Teacher;

  通过这样,我们就能实现了需要继承的方法都定义在了构造器的prototype属性内,这样才不会打乱了类继承结构。

  4.向Teacher()添加新的greeting方法

Teacher.prototype.greeting = function() {
      var prefix;

if(this.gender === 'male' || this.gender === 'Male' || this.gender === 'm' || this.gender === 'M') {
        prefix = 'Mr.';
      } else if(this.gender === 'female' || this.gender === 'Female' || this.gender === 'f' || this.gender === 'F') {
        prefix = 'Mrs.';
      } else {
        prefix = 'Mx.';
      }

alert('Hello. My name is ' + prefix + ' ' + this.name.last + ', and I teach ' + this.subject + '.');
    };

  5.最后运行创建teacher实例,我们就能得到了从Person()构造器继承的属性和方法,并具有只有Teacher()的构造器才有的属性方法。   6.对象成员

  通过学习,我们可以知道一般对象所具有的对象成员包括三类:

    1.那些定义在构造器函数中的、用于给予对象实例的。一般为对象属性。

    2.那些直接在构造函数上定义、仅在构造函数上可用的。这些通常仅在内置的浏览器对象中可用,并通过被直接链接到构造函数而不是实例来识别。 例如Object.keys()。

    3.那些在构造函数原型上定义、由所有实例和对象类继承的。一般为对象方法。

深入--设计模式原则

  当然,通过上述的方法我们可以实现了基本的面向对象的编程,但是,要实现更高级的类库封装和框架实现,则需要能对设计模式有很好的认知。

  在这,我就列举下设计模式原则,希望大家包括我自己有学习的方向。一般的设计原则为:

    1.单一职责原则

    2.里氏替换原则

    3.依赖倒置原则

    4.接口隔离原则

    5.迪米特原则

    6.开闭原则

  当然,还有关于面向对象的设计模式(23种),则需要深入了解了,其实这已经是有深入到我们自己的代码中了,只是我们对它的认知并不深。这个就后续了解了~~~

实战:构建对象--弹跳球(ES6实现)   背景

  通过对面向对象基本概念,面向对象的编程思想和构造器,原型实现方法实现一个简单的弹跳球小游戏。

  介绍

  主要通过ES6,class语法糖,通过canvas绘制背景并控制evil的上下左右,吃掉小球。

  上代码

  1.index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Bouncing balls</title>
    <link href="https://www.linuxidc.com/style.css">
</head>
<body>
<canvas></canvas>
<script src="https://www.linuxidc.com/mainUpgrade.js"></script>
</body>
</html>

  2.mainUpgrade.js

const canvas=document.querySelector('canvas');
const ctx=canvas.getContext('2d');

const width=canvas.width=window.innerWidth;
const height=canvas.height=window.innerHeight;

//create a random number between min and max.
random=(min,max)=>{
    let num=Math.floor(Math.random()*(max-min+1))+min;
    return num;
};

//create constructor for ball
class Shape{
    constructor(x,y,velX,velY,exists){
        this.x=x;
        this.y=y; //坐标
        this.velX=velX;
        this.velY=velY; //水平和竖直速度
        this.exists=exists; //是否存在
    }
}

class Ball extends Shape{
    constructor(x,y,velX,velY,exists,color,size){
        super(x,y,velX,velY,exists);
        this.color=color;
        this.size=size;
    }

// draw ball
    draw (){
        ctx.beginPath();
        ctx.fillStyle=this.color;
        ctx.arc(this.x,this.y,this.size,0,2*Math.PI); // arc()绘制圆弧
        ctx.fill();
    }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/e3fc8c665b7fbcbfff322ada1cfc0f9d.html