js中面向对象编程

211 阅读3分钟

1、使用面向对象的方式来做这个案例---注意:面向对象是面向过程的封装,不是完全替代了面向过程 面向对象与,面向过程的区别 ①面向过程就是亲力亲为,事无巨细,步步紧跟 ②面向对象就是找一个对象,指挥得到结果 ③面向对象将执行者变为指挥者 ④面向对象不是面向过程的替代,而是面向过程的封装

案例一:随机生成小方块  思考:1、这个案例里可以抽象出哪些对象---方块对象

    2、随机生成颜色 位置 ----- 生成随机数--封装成函数,但是封装成函数比较散为了方便管理,把不同功能的函数封装不同对象的方法中

所以这个项目会有2个对象 方块对象 + 工具对象 (封装很多功能函数)

   方块对象有很多,这些对象都很类似,所以我们可以通过构造函数的方式来创建对象:批量创建相似类型的对象。

   工具对象在整个项目中只有一个,所以直接用创建普通对象的方式来创建工具对象就行。 代码实现:

1、创建工具对象---对象的方法来封装些功能(生成随机数) 2、创建方块对象 a、创建构造函数

  b、分析方块对象的成员---即构造函数的属性、方法(无对错,只有合适不合适):   属性:方块的背景颜色、方块的大小、方块的坐标、   方法:随机生成自己的坐标

function Box(parent, options) {
        options = options || {};
        //设置对象的属性
        this.backgroundColor = options.backgroundColor || 'red';
        this.width = options.width || 20;
        this.height = options.height || 20;
        this.x = options.x || 0;
        this.y = options.y || 0;
        //创建对应的div 用this.div为了能够在原型中访问到这个div
        this.div = document.createElement('div');
        parent.appenChild(div);
    }
    //初始化div的样式
    Box.prototype.init = function() {
        var div = this.div
        div.style.backgroundColor = this.backgroundColor;
        div.style.width = this.width + 'px';
        div.style.height = this.height + 'px';
        div.style.left = this.x + 'px';
        div.style.top = this.y + 'px';
        //脱离文档流
        div.style.position = 'absolute'
        //创建对应的div
        this.div = document.createElement('div');
        parent.appendChild(this.div);
        //设置div的样式
        this.init();
    }
    //随机生成方块的位置
    Box.prototype.random = function() {
        //父容器的宽度 方块的宽度 总共能放多少块
        var x = Tools.getRandom(0, this.parent.offsetWidth / this.width - 1) * this.width;
        var y = Tools.getRandom(0, this.parent.offsetHeight / this.height - 1) * this.height;
        this.div.style.left = x + 'px';
        this.div.style.top = y + 'px';
    }

3、随机生成方块的调用---实现随机生成方块

	//生成十个方块 随机生成颜色
	
	//获取容器
	var container = doucment.getElementById('container');
	for(var i = 0; i < 10; i++) {
		var r = Tools.getRandom(0,255);
		var g = Tools.getRandom(0,255);
		var b = Tools.getRandom(0,255);
		
		var box = new Box(container, {
		backgroundColor: `rgb('+r+','+g+','+b+')`
		});
	}
	//数组 存储创建的方块对象
	var array = [];
	for(var i = 0; i < 10; i++) {
		var r = Tools.getRandom(0,255);
		var g = Tools.getRandom(0,255);
		var b = Tools.getRandom(0,255);
		
		var box = new Box(container, {
		backgroundColor: `rgb('+r+','+g+','+b+')`
		});
		array.push(box)
	}
	
	//设置随机位置开启定时器
	setInterval(function(){
		//随机生成方块的坐标
		
	},500);
	setInterval(randomBox, 500);
	
	function randomBox() {
		//随机生成方块的坐标
		for(var i = 0; i < 10; i++) {
			var box = array[i];
			box.random();
		}
	}
	//设置随机位置 开启定时器
	setInterval(randomBox, 500)
	//加载完成 先设置随机位置
	//用有名函数时为了页面一加载时就可以调用randombox函数不用等500ms避免方块一开始都在00位置
	function randomBox() {
		for(var i = 0; i < 10; i++) {
			var box = array[i];
			box.random();
		}
	}