创建对象的6种方式

对象是无序属性的集合
表现的方式:
{“key”:value,“key2”:value2}
: 是映射
= 是赋值
key是字符串
value是任何数据类型
且不重复

第一 new Object

// 1.new Object
var x = "age";//设置变量
var obj = new Object(); //创建对象
	obj.name = "li"; //对象中添加内容
	obj.x = 23;// 变量 = 值    . 是字符串
	console.log(obj);//输出的是添加过后的对象


	obj[x] = 23;//另一种写法  将变量写进[]里面
	console.log(obj);//输出的是添加过后的对象

第二 字面量方式

// 2. 字面量定义方式
var x = "hooby";//创建变量
var obj = {"name","静静","age",23};//直接创建对象
	//以下为添加值
	obj.sex = "男";
	obj.say = function(){};
	obj[x] = "唱歌";
	//输出obj 结果为02字面量.html:23 {name: "李路康", age: 23, sex: "男", hooby: "唱歌", say: ƒ}


//取值
var obj1 = {"name","静静","age",23};
var a = obj1["name"];
//输出a的结果为  静静
var b = obj1["age"];
//输出b的结果为  23
//先创建对象  在设置变量 = 创建的对象[这里写对象中的属性]  就可以将某一项的值取出

第三 工厂函数

/*
	创建具有相同属性名的对象
	写法:
		1.创建函数
		2.传入参数
		3.函数内创建对象
		4.returun  对象
*/

var obj = {"name": "静静", "age": 23,"say": function (){}};
function fun(name,age){
	var obj = {
	"name": name,
	"age": age ,
	"say": function(){}
	}
	return obj;
}

//依次调用  修改原对象的值  
//只能一个一个修改
var obj1 = fun("晶晶",23);
//输出obj1结果为{name: "li", age: 23, say: ƒ};

//循环调用
//可以创建数组一次修改多个
var obj2 = ["爱爱","珍珍","怜怜","贾夫人"];
var obj3 = [16,18,20,38];

for(var i = 0; i < obj2.length; i++){
	var a = fun(obj2[i],obj3[i])
	//输出a的结果为
	//{name: "gao", age: 18, say: ƒ}
	//{name: "li", age: 19, say: ƒ}
	//{name: "wang", age: 20, say: ƒ}
	//{name: "zhao", age: 21, say: ƒ}
}

//优点:返回新对象  互不影响
//缺点:代码重复(相同的方法)  没有从属关系(不知道对象从哪里来)---->instanceof  只能判断是对象  不能判断属于谁

第四 构造函数

/*
构造函数可以解决工厂模式的从属关系

构造函数的函数名首字母要大写

	构造函数写法:
		1.创建函数
		2.传入参数
		3.this.属性名 = 值
	调用方式:
		var obj = new 函数名(参数);
*/
function Fn(name,age){
	this.name = name;
	this.age = age;
	this.say = function(){}
}
var obj = new Fn("静静",23);
var a = obj instanceof Object;//判断是否属于对象
var b = obj instanceof Fn;//判断从属于谁   

第五 原型模式

//每一个函数都有一个prototype属性
//属性的值是对象  这个对象叫做原型对象
function Fn(){
	
}
Fn.prototype.name = "静静";
Fn.prototype.age = 23;

var obj = new Fn();
//输出obj结果为  空 对象
obj.__proto__.name = "晶晶";
//输出obj.__proto__.name的结果为  晶晶
//输出obj.name的结果为  晶晶
//两种输出只是换了从复杂到简单  化繁为简


 //公共/相同的属性、方法放在 构造函数.prototype   上 ---> 实现 代码不重复
 //  原型模式  一个改变另外的也改变
 var obj1 = new Fn();
 //输出 obj1 结果为  空  对象
 //输出 obj1.__proto__.name 的结果为  晶晶


//原型模式
	//优点:公共/相同  的  属性.方法 不重复
	//缺点:原型上的  属性不可变

第六 组合模式 (构造函数+原型模式)

//属性定义在构造函数内
function Fn(name,age){
	this.name = name;
	this.age = age;
}
Fn.prototype.say = function(){
	console.log("和你在一块我很开心");
}

var obj1 = new Fn("静静"23);
var obj2 = new Fn("盈盈"25);
//输出 obj1 的结果为{name: "静静", age: 23}
//输出 obj2 的结果为{name: "盈盈", age: 25}

//组合模式 = 构造 + 原型
//有从属关系
//原型不重复
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值