一.对象的创建及常用操作
(1,3其实差不多,少量的时候可以使用)
1.使用new运算符
var user = new Object();
user.name = '编程浪子';
user.age = 22;
user.address = '四川成都';
2.对象字面量
var user = {
name:'编程浪子',
age:22,
address:'四川成都'
};
3.简单方式(传统的赋值方法)
var user = {};
user.name= '编程浪子';
user.age = 22;
user.address = '四川成都';
4.属性的调用
a.alert(user.name + " " + user.age);
b.alert(user['name'] + " " + user['age']);
5.添加方法
var user = {
name:'编程浪子',
age:22,
address:'四川成都',
showInfo:function(){//添加一个方法
alert(this.name+" " + this,age + " " +this.address);
},
showHello:showHello//将对象外部的方法添加到对象
};
function showHello(){
alert('hello');
}
user.showInfo(); //调用方法
user.showHello();
========================================================================
上面只是简单的封装一个对象,如果要封装很多个对象,就好出现很多相同的代码
1.工厂模式
优点:解决了实例化时代码大量重复的问题
缺点:识别问题,无法知道到底是哪个对象的实例(alert (typeof obj1)//object)
function create(name,age){
var obj = new Object();
obj.name = name;
obj.age = age;
obj.show = function(){
return this.name + ' ' + this.age;
}
return obj;
}
var obj1 = create('bclz',30); //第一个实例
var obj2 = create('bclz',20); //第二个实例
alert(obj1.show());
alert(obj2.show());
2.构造函数
优点:解决工厂模式的缺陷
缺点:每个方法都要在实例上重新创建一次
function User(name,age){
this.name = name;
this.age = age;
this.show = function(){
return this.name +' ‘+this.age;
};
}
var user1 = new User('bclz',30);//第一个实例
var user2 = new User('bclz',20);//第二个实例
现在我们就可以检测user1或者user2是不是属于User。
alert(user1 instanceof User);//true
========================================================================
我们需要引入另外一个javascript面向对象的重要概念**原型**
function SuperType(){
}
// alert(SuperType.prototype);//类型 prototype隐藏属性
// alert(SuperType.prototype.constructor); //指向function本身
function Cat(name,color){
this.name = name,
this.color = color
}
Cat.prototype.type = "猫科动物";
Cat.prototype.eat = function(){
alert("吃老鼠");
}
var cat1 =new Cat("大毛","黄色");
var cat2 =new Cat("二毛","黑色");
alert(cat1.type);
//指向同一个内存地址,提高了运行效率
alert(cat1.type == cat2.type);