对象的定义为:“无序属性的集合,其属性可以包含基本值,对象或者函数”
1.创建单个对象(对象字面量,构造函数):
<script type="text/javascript">
//通过创建phone实例为例子
//构造函数创建单个对象
// var phone=new Object();
// phone.color=‘black‘;
// phone.size=24;
// phone.getColor=function(){
// console.log(this.color);
// }
//对象字面量创建单个对象
var phone={
//属性
color:‘black‘,
size:24,
//方法
getColor:function () {
console.log(this.color);
}
}
//测试
console.log(phone)
</script>
测试结果为:

2.工厂模式创建多个对象
利:可以创建多个相似对象
弊:所有创建的对象的类型都为Object类型
<script type="text/javascript">
//工厂模式
function createPhone(color,size){
//创建一个Object对象
var o=new Object();
//将传入的值赋给这个对象的属性
o.color=color;
o.size=size;
o.getColor=function(){
console.log(this.color);
}
//返回这个对象
return o;
}
//测试
var phone1=createPhone(‘black‘,8);
var phone2=createPhone(‘blue‘,5);
console.log(phone1,phone2)
</script>
3.构造函数模式创建多个对象
利:自定义构造函数可以将实例构造成一种特定的类型
弊:每创建一个实例,都要创建一个getColor方法
<script type="text/javascript">
//构造函数模式
function Phone(color,size){
this.color=color;
this.size=size;
this.getColor=function(){
console.log(this.color);
}
}
//1.创建一个新对象
//2.将构造函数的作用域赋给新对象(this指向这个新对象)
//3.执行构造函数中的代码
//4.返回新对象
var phone1=new Phone(‘black‘,4);
var phone2=new Phone(‘blue‘,5);
</script>
4.原型模式创建多个对象
利:可以让所有对象的实例都共享它所包含的属性和方法
弊:所有实例取得的属性值都是一样的,原型对象对所有实例一视同仁,开放共享
<script type="text/javascript">
//原型模式
// function Phone(){};
// Phone.prototype.color=‘black‘;
// Phone.prototype.size=5;
// Phone.prototype.getColor=function(){
// console.log(this.color);
// }
// var phone1=new Phone();
// console.log(phone1);
//也可以使用对象字面量写
function Phone(){}
Phone.prototype={
color:‘black‘,
size:5,
getColor:function(){
console.log(this.color)
}
}
var phone1=new Phone();
console.log(phone1)
</script>
5.组合使用构造函数和原型模式创建多个对象
<script type="text/javascript">
//组合使用构造函数模式和原型模式
function Phone(color,size){
this.color=color;
this.size=size;
}
Phone.prototype={
constructor:Phone,
getColor:function(){
console.log(this.color)
}
}
var phone1=new Phone(‘black‘,2);
var phone2=new Phone(‘blue‘,5);
phone1.color=‘golden‘;
console.log(phone1);
console.log(phone2);
</script>
6.动态原型模式创建多个对象
<script type="text/javascript">
//动态原型模式
function Phone(color,size){
this.color=color;
this.size=size;
//初次调用构造函数时才会执行下面的代码
if(typeof this.getColor!=‘function‘){
//不能使用对象字面量方式创建
Phone.prototype.getColor=function(){
console.log(this.color);
}
}
}
var phone1=new Phone(‘black‘,3);
console.log(phone1);
phone1.getColor();
</script>
7.寄生构造函数模式创建多个对象
<script type="text/javascript">
//寄生构造函数模式
function Phone(color,size){
var o=new Object();
o.color=color;
o.size=size;
o.getColor=function(){
console.log(this.color)
}
return o;
}
var phone1=new Phone(‘black‘,3);
console.log(phone1)
</script>
8.稳妥构造函数模式创建多个对象
<script type="text/javascript">
//稳妥构造函数模式(稳妥对象是指没有公共属性)
function Phone(color,size){
var o=new Object();
//定义私有变量
var name=‘huaiwei‘;
//定义私有函数
var getName=function(){
console.log(name);
}
o.getColor=function(){
console.log(color);
}
return o;
}
var phone1=Phone(‘black‘,3);
phone1.getColor();
</script>