1、创建对象的6种方式
对象:无序的属性的集合,key 字符串(不重复),value 任何数据类型
表现方式:{ “key”:value,“key2”:value2,“key3”:function(){ } } : 映射 = 赋值
1)new Object()
var x="age";
var obj=new Object();
obj.name="gao";
obj.x=18; // .字符串
obj[x]=16; // [变量]
console.log(obj);
- 字面量
var x="hooby";
var obj={ "name":"gao","age":18 };
obj.sex="男";
obj[x]="唱歌"
obj.say= function (){
}
console.log(obj);
创建 具有 相同 属性名 的 多个对象
3)工厂函数
// 优点: 返回 新对象,互不影响
// 缺点: 代码重复(相同方法)、
// 没有从属(不能知道对象从那里来)-->instanceof 只能判断 是 对象,不能判断属于谁
function students(name,age){
var obj={
"name":name,
"age":age,
"say":function(){}
}
return obj;
}
/*
工厂模式写法
1、创建函数
2、传入参数
3、函数内创建对象
4、retrun 对象
*/
/*
调用:
函数名(参数)
*/
var obj1 = students("gao",18);
console.log(obj1);
// 没有从属(不能知道对象从那里来)-->instanceof 只能判断 是 对象,不能判断属于谁
console.log(obj1 instanceof Object); //true
console.log(obj1 instanceof students);//false
4)构造函数
//优点: 有从属
//缺点: 代码重复(相同方法)、
//共识:构造函数首字母大写
function Students(name,age){
this.name= name;
this.age= age;
//代码重复(相同方法)
this.say=function(){
}
}
/*
构造函数写法:
1、创建函数
2、传入参数
3、this.属性名 = 值
*/
/*
调用:
var obj =new 构造函数(参数)
*/
var obj1= new Students("gao",19);
console.log(obj1);
console.log( obj1 instanceof Object );//true
console.log( obj1 instanceof Students );//true 有从属
5)原型对象
原型:每个函数中都有一个 prototype 属性 ,属性的值是对象,这个对象 叫原型对象
// 优点: 公共/相同 的 属性 、方法 不重复
// 有从属关系
// 缺点: 原型上的 属性不可单独改变
function Fn(){
}
Fn.prototype.name="高";
Fn.prototype.age=19;
Fn.prototype.say=function(){
};
var obj1=new Fn();
console.log("obj1",obj1);
6)组合模式 +(构造函数模式 +原型模式)
// 组合模式 (构造 + 原型)
// 有从属关系
// 不重复
// 属性 定义在 构造函数 内
function Fn(name,age){
this.name=name;
this.age=age;
}
// 方法 定义在 构造函数的 原型对象上
Fn.prototype.say=function(){
console.log("哈哈哈哈哈");
}
var obj1= new Fn("gao",12);
var obj2= new Fn("王",19);
console.log("obj1",obj1);
console.log('obj2', obj2);
obj1.say();
obj2.say();