原生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();
}

原文地址:https://www.cnblogs.com/JD85/p/9069976.html

时间: 2024-10-09 08:15:15

原生js面向对象写法的相关文章

原生JS面向对象思想封装轮播图组件

原生JS面向对象思想封装轮播图组件 在前端页面开发过程中,页面中的轮播图特效很常见,因此我就想封装一个自己的原生JS的轮播图组件.有了这个需求就开始着手准备了,代码当然是以简洁为目标,轮播图的各个功能实现都分别分为不同的模块.目前我封装的这个版本还不适配移动端,只适配PC端. 主要的功能有:自动轮播,点击某一张图片对应的小圆点就跳转到指定图片,有前后切换按钮.使用的时候只需要传入图片的路径以及每张图片分别所对应的跳转路径还有目标盒子ID就可以了,还可以自定义每张图轮播的延时,不过延时参数不是必须

原生js面向对象编程-选项卡(点击)

<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>原生js面向对象选项卡(点击)</title> <style> #div1 div{ width:400px; height:300px; border:1px solid #ccc; overflow: hidden; display: non

原生js面向对象编程-选项卡(自动轮播)

<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>原生js面向对象编程-选项卡(自动轮播)</title> <style> #div1 div{ width:400px; height:300px; border:1px solid #ccc; overflow: hidden; display

常用原生JS兼容写法

在我们前端开发中,经常会遇到兼容性的问题,因为要考虑用户会使用不同的浏览器来访问你的页面,你要保证你做的网页在任何一个浏览器中都能正常的运行,下面我就举几个常用原生JS的兼容写法: 1:添加事件方法 addHandler:function(element,type,handler){  if(element.addEventListener){//检测是否为DOM2级方法   element.addEventListener(type, handler, false);  }else if (e

原生js面向对象实现简单轮播

平时中我习惯用jquery写轮播效果,实现过程不是很难,也很方便,为了加深对js面向对象的理解,我打算用面向对象实现一个简单的轮播,这里采用了字面量的方式实现.为了实现这个过程,我们要自己动手封装一个运动函数animate,在这里我采用的是匀速运动的方式,这种方式可能体验不是很好,后面分析js代码我在详细解释.废话不多说,先上代码.页面布局可以根据自己的习惯来. html代码: <head> <meta charset="UTF-8"> <meta nam

js面向对象写法

//对象字面量写法 var fn = { name: 'hello world', fn1: function() { console.log(this.name); } }; fn.fn1(); //prototype原型写法 function Fn() { this.name = 'hello world'; this.fn1 = function() { console.log(this.name); }; Fn.prototype.fn2 = function() { console.l

js面向对象写法及栈的实现

1 function Stack() { 2 this.dataStore = []; 3 this.top = 0; //指向栈顶的位置 4 this.push = push; 5 this.pop = pop; 6 this.peek = peek; 7 this.clear = clear; 8 this.length = length; 9 10 function push(element) { 11 this.dataStore[this.top++] = element; //先赋值

粗看ES6之面向对象写法

在es6以前,js没有类的概念,虽然有构造函数原型的方式用来做面向对向开发,但是对于书法并不是十分友好,而且对于继承实现也不是十分友好. es6引入class constructor extends super等关键字简化了JS面向对象写法,以后可以跟后端说JS也终于是有类的一门语言了,哈哈. ES6的面向对象写法如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT

原生JS forEach()和map()遍历的区别以及兼容写法

一.原生JS forEach()和map()遍历 共同点: 1.都是循环遍历数组中的每一项. 2.forEach() 和 map() 里面每一次执行匿名函数都支持3个参数:数组中的当前项item,当前项的索引index,原始数组input. 3.匿名函数中的this都是指Window. 4.只能遍历数组. 1.forEach() 没有返回值. arr[].forEach(function(value,index,array){ //do something }) 参数:value数组中的当前项,