原生js面向对象写法

Posted 居家懒人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了原生js面向对象写法相关的知识,希望对你有一定的参考价值。

Mouse就是一个类,有自己的成员变量和成员方法,成员方法一定加上prototype,避免js原型的坑。

var Mouse = function(id)
{

    this.id = id;
    this.name = "";
    this.mes = null;//被创建的那个div
    this.con = null;
    this.runAwayInterval = null;

    this.init();
};

Mouse.prototype.init = function()
{
    // console.log("初始化id为 " + this.id + " 的mouse");
    this.show();

}

Mouse.prototype.show = function()
{
    this.mes = document.createElement("div");
    this.mes.setAttribute("id","mickey");
    this.con = document.getElementById("container");
    this.mes.style.opacity = 1;
    this.con.appendChild(this.mes);

    
    this.mes.onclick = function()
    {
        getScore();
        this.con.removeChild(this.mes);
        clearInterval(this.runAwayInterval);
        removeOneMouse(this.id);
    }.bind(this);
    // console.log(this.con.offsetWidth - 100);
    this.mes.style.left = Math.random()*(this.con.offsetWidth - 100).toString()+"px";
    var targetTop = Math.random()*(this.con.offsetHeight - 100) +50;
    this.mes.style.top =targetTop  +"px";
    // this.mes.style.top = 0 +"px";

    this.runAwayInterval = setInterval(this.runAway.bind(this),200);
}

Mouse.prototype.runAway = function()
{
    // console.log("我是‘ "+ this.id +" ‘我正在跑...");

    var opa = parseFloat(this.mes.style.opacity);
    opa -= 0.1;
    this.mes.style.opacity = opa;
    if(opa<=0)
    {
       this.lose();
    }
}

// Mouse.prototype.beCatch = function()
// {
//     this.con.removeChild(this.mes);
//     clearInterval(this.runAwayInterval);
// }

Mouse.prototype.lose = function()
{
    // console.log("我是‘ "+ this.id +" ‘我成功跳走了...");
    this.con.removeChild(this.mes);
    clearInterval(this.runAwayInterval);
    removeOneMouse(this.id);
    loseScore();
}

 

以上是关于原生js面向对象写法的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段——JS中的面向对象编程

VSCode自定义代码片段9——JS中的面向对象编程

JS面向对象到底有啥用?面向对象里函数的写法和普通函数写法有啥区别?都有哪些优势?

js面向对象的几种写法

js面向对象

基于面向对象的图片轮播(js原生代码)