什么是对象
对象的定义是:无序属性的集合,其属性可以包括基本值、对象或函数。
var car = {}; //比如我们拿一块铁造了一辆车,这的名字叫car /建一个空对象
car.length = "5m"; //车的长度是5米 /对象的基本值
car.height = "1.4m";//车的高度是1.4米 /对象的基本值
car.chair ={length:"0.5m",height:"1m"}; //车里面有椅子,椅子有高度有长度(椅子也是个对象)/对象里面的对象
car.drive(); //车可以开 /对象的函数(方法)
属性是对象内存在的名称和值。例如 car.length = "5m";
方法是对象能够调用的动作。例如car.drive();
回顾下函数的定义:无序属性的集合,其属性可以包括基本值、对象或函数。
car这个对象里面,有基本值,有对象,有函数。这些东西在car对象里面是无序。
上面的代码和下面的代码运行结果是一样的。(也许更好理解点)
var car = {
length:"5m", //车有长度(基本值)
height:"1.4m", //车有高度(基本值)
chair:{length:"0.5m",height:"1m"}, //车里有椅子(对象)
drive:function (){console.log("car go")} //车可以开(函数或叫方法)
}
对象的创建:
var em = {}; //直接创建
var ob = new Object(); //构造函数方式创建
var cr = Object.create({x:1,y:2});
工厂模式
function createPerson(name,age,sex){
          var p = new Object();
          p.name = name;
          p.age = age;
          p.sex = sex;
          p.message=function(){
                console.log('name:'+this.name+",age:"+this.age+",sex:"+this.sex);
          }
          return p;
    }
var person = createPerson("李四",18,"男");
构造函数模式
function Person(name,age,sex){
this.name = name;
this.age = age;
this.sex = sex;
this.message = function(){
console.log('name:'+this.name+",age:"+this.age+",sex:"+this.sex);
}
}
var person = new Person("李四",18,"男");
原型模式(有缺陷不可单独使用)
function Person(){}
Person.prototype.name = "李四";
Person.prototype.age= 18;
Person.prototype.sex= "man";
Person.prototype.message= function(){
console.log('name:'+this.name+",age:"+this.age+",sex:"+this.sex);
}
var person = new Person();
person.message();
组合使用构造函数模式和原型模式(推荐使用)
function Person(name,age,sex){
this.name = name;
this.age = age;
this.sex = sex;
}
Person.prototype={
constructot:Person,
message:function(){
console.log('name:'+this.name+",age:"+this.age+",sex:"+this.sex);
}
}
var person1 = new Person("李四",18,"男"),
person2 = new Person("王五",19,"男");
动态原型模式(推荐使用)
function Person(name,age,sex){
this.name = name;
this.age = age;
this.sex = sex;
if(typeof this.message !="function"){
Person.prototype.message= function(){
console.log('name:'+this.name+",age:"+this.age+",sex:"+this.sex);
}
}
}
var person = new Person("李四",18,"男");
寄生构造函数模式
function Person(name,age,sex){
var p = new Object();
p.name = name;
p.age = age;
p.sex = sex;
p.message = function(){
console.log('name:'+this.name+",age:"+this.age+",sex:"+this.sex);
}
return p;
}
var person = new Person("李四",18,"男");
稳妥构造函数模式(适合在安全的环境下使用)
function Person(name,age,sex){
var p = new Object();
p.name = name;
p.age = age;
p.sex = sex;
p.message = function(){
console.log('name:'+name+",age:"+age+",sex:"+sex);
}
return p;
}
var person = Person("李四",18,"男");
 
                    
                 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号