创建对象的多种方式

115 阅读1分钟
		// new Object
		// 这种方式虽正规,但比较麻烦,需要先创建实例,再逐个添加属性和方法
		// let mlt = new Object();
		// mlt.meat = ['beef','pork','salmon'];
		// mlt.vegetable = ['cabbage','broccoli','carrot'];
		// mlt.ingredient = ['salt','oil','chili'];
		
		// mlt.effect = function(){
		// 	console.log(`${this.vegetable[1]}有利于身体健康(new Object)`);
		// }
		// console.log(mlt);
		// mlt.effect();
		
		// 对象字面量
		// let mlt = {
		// 	meat : ['beef','pork','salmon'],
		// 	vegetable : ['cabbage','broccoli','carrot'],
		// 	ingredient : ['salt','oil','chili'],
		// 	effect(){
		// 		console.log(`${this.vegetable[1]}有利于身体健康()对象字面量`);
		// 	}
		// }
		// console.log(mlt);
		// mlt.effect();
		
		// 工厂模式
		// 解决了创建多个类似结构对象的问题
		// 但无法让新对象与创造它的函数进行链接
		// function createMLT(meat, vegetable, ingredient){
		// 	let obj = new Object();
		// 	obj.meat = meat;
		// 	obj.vegetable = vegetable;
		// 	obj.ingredient = ingredient;
		// 	obj.effect = function(){
		// 		console.log(`${this.vegetable[0]}有利于身体健康(工厂模式)`);
		// 	};
		// 	return obj;
		// }
		
		// let meat1 = ['beef','pork','salmon'];
		// let vegetable1 = ['cabbage'];
		// let ingredient1 = ['salt'];
		
		// let meat2 = ['pork'];
		// let vegetable2 = ['broccoli'];
		// let ingredient2 = ['oil'];
		
		// let mlt1 = createMLT(meat1, vegetable1, ingredient1);
		// let mlt2 = createMLT(meat2, vegetable2, ingredient2);
		// mlt1.effect();
		// mlt2.effect();
		
		// 构造函数
		// function MLT(meat, vegetable, ingredient){
		// 	this.meat = meat;
		// 	this.vegetable = vegetable;
		// 	this.ingredient = ingredient;
		// 	this.effect = function(){
		// 		console.log(`${this.vegetable[0]}有利于身体健康(构造函数)`);
		// 	};
		// }
		
		// let meat1 = ['beef','pork','salmon'];
		// let vegetable1 = ['cabbage'];
		// let ingredient1 = ['salt'];
		
		// let meat2 = ['pork'];
		// let vegetable2 = ['broccoli'];
		// let ingredient2 = ['oil'];
		
		// let mlt1 = new MLT(meat1, vegetable1, ingredient1);
		// let mlt2 = new MLT(meat2, vegetable2, ingredient2);
		// mlt1.effect();
		// mlt2.effect();
		
		// Object.create
		// 新对象和原型都会被修改,它们之间是有关联的
		// let mlt = {
		// 	meat : ['beef','pork','salmon'],
		// 	vegetable : ['cabbage','broccoli','carrot'],
		// 	ingredient : ['salt','oil','chili'],
		// 	effect(){
		// 		console.log(`${this.vegetable[0]}有利于身体健康()对象字面量`);
		// 	}
		// }
		// let mlt1 = Object.create(mlt);
		// mlt.vegetable.push('garlic');
		
		// console.log(mlt.vegetable);
		// console.log(mlt1.vegetable);
		
		// class
		// 可算作构造函数的语法糖
		// 使我们可以使用面向对象编程
		// class MLT {
		// 	constructor (meat, vegetable, ingredient){
		// 	this.meat = meat;
		// 	this.vegetable = vegetable;
		// 	this.ingredient = ingredient;
		// 	this.effect = function(){
		// 		console.log(`${this.vegetable[0]}有利于身体健康(构造函数)`);
		// 		};
		// 	}
		//};
			
		// 	let meat1 = ['beef'];
		// 	let vegetable1 = ['cabbage'];
		// 	let ingredient1 = ['salt'];
			
		// 	let meat2 = ['pork'];
		// 	let vegetable2 = ['broccoli'];
		// 	let ingredient2 = ['oil'];
			
		// 	let mlt1 = new MLT(meat1, vegetable1, ingredient1);
		// 	let mlt2 = new MLT(meat2, vegetable2, ingredient2);
		// 	mlt1.effect();
		// 	mlt2.effect();