创建对象六种方式

newObject

var x="age";
var obj=new Object();
obj.name="gao";  
obj.x=18; 
.字符串       
obj[x]=16;  // [变量]
console.log(obj);

字面量

对象 中 __proto__   
函数 中 prototype 
var x="hooby";   
var obj={ "name":"gao","age":18 };
obj.sex="男";  
obj[x]="唱歌"    
obj.say= function (){
}   
console.log(obj);
.字符串 
[变量 / "key名" / "key名是特殊字符" ]
var obj2={"aa bb":123, ".x":456};
console.log( obj2["aa bb"] );            console.log( obj2[".x"] );

工厂模式

var obj1={"name":"gao0","age":18,"say":function(){}}        var obj2={"name":"gao1","age":19,"say":function(){}}        var obj3={"name":"gao2","age":20,"say":function(){}}        var obj4={"name":"gao3","age":21,"say":function(){}};
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);   
console.log(obj1 instanceof Object);                            循环调用 
var names=["gao","wang","li","zhao"]; 
var ages=[18,19,20,21];
for(var i=0;i<names.length;i++){ 
console.log( students(names[i] ,ages[i]  )  )            } 
优点: 返回 新对象,互不影响
缺点: 代码重复(相同方法)
有从属(不能知道对象从那里来)
-->instanceof 只能判断 是 对象,不能判断属于谁

构造函数

优点: 有从属  
缺点: 代码重复(相同方法)
共识:构造函数首字母大写
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 );        console.log( obj1 instanceof Students );

原型模式

原型模式
优点: 公共/相同 的 属性 、方法  不重复 
有从属关系// 缺点: 原型上的 属性不可单独改变 
function Fn(){
}
Fn.prototype.name="高"; 
Fn.prototype.age=19; 
var obj1=new Fn(); 
console.log("obj1",obj1);  
修改 obj1.__proto__.name  
obj1.__proto__.name  发生变化   
obj2.__proto__.name  发生变化   
obj1 和 obj2 共用 __proto__ 对象    
公共/相同 的 属性 、方法 放在 构造函数.prototype 上 -- 实现 代码不重复
obj1.__proto__.name ="王"; 
console.log("obj1-name:",obj1.__proto__.name,obj1.name)     var obj2=new Fn();
console.log("obj2",obj2);
console.log("obj2-name:",obj2.__proto__.name,obj2.name);

组合模式

组合模式 (构造 + 原型)
有从属关系  
不重复
属性定义在 构造函数 内 
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);
bj1.say();        
obj2.say();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值