首页 > 代码库 > javascript中对象的创建

javascript中对象的创建

本文是根据李炎恢老师的相关视频和讲义整理成的,如果感兴趣可以亲自去听李炎恢老师的相关课程。讲的很详细。下面是链接:javascript视频教程

 

  1.一般方法:

  创建一个对象,然后给这个对象新建属性和方法。
  var box = new Object();                   //创建一个Object 对象
      box.name = ‘Lee‘;                           //创建一个name 属性并赋值
      box.age = 100;                              //创建一个age 属性并赋值
      box.run = function () {            //创建一个run()方法并返回值
   return this.name + this.age + ‘运行中...‘;
   };
  alert(box.run());                        //输出属性和方法的值

缺点:不适合大量创建类似对象,这样会需要很多代码

    2.工厂模式

 为了解决多个类似对象声明的问题,我们可以使用一种叫做工厂模式的方法,这种方法
就是为了解决实例化对象产生大量重复的问题。

    function createObject(name,age){

        var obj = new Object();

        obj.name = name;

        obj.age = age;

        obj.run = function(){

       


return this.name + this.age +"运行中……";

  };

   return obj;

}

  var box1 = creatObject("Lee",100);

  var box2 = creatObject("xia",200);

缺点:无法知道他们到底是哪个对象的实例。

alert(box1 instanceof Object);     //true

 3. 构造函数法

function Box(name,age){

    this.name = name;

    this.age = age;

    this.run = function(){

      return  this.name +this.age +"正在运行中……";

   };

}

var box1 = new Box("Lee",100);

var box2 = new Box("xia",200);

alert(box1 instanceof Box);    //true,很清楚的知道box1属于Box类

使用了构造函数的方法,和使用工厂模式的方法他们不同之处如下:
<1>构造函数方法没有显示的创建对象(new Object());
<2>直接将属性和方法赋值给this 对象;
<3>没有renturn 语句。


构造函数的方法有一些规范:
<1>函数名和实例化构造名相同且大写,(PS:非强制,但这么写有助于区分构造函数和普通函数);
<2>通过构造函数创建对象,必须使用new 运算符。


既然通过构造函数可以创建对象,那么这个对象是哪里来的,new Object()在什么地方
执行了?执行的过程如下:
<1>当使用了构造函数,并且new 构造函数(),那么就后台执行了new Object();
<2>将构造函数的作用域给新对象,(即new Object()创建出的对象),而函数体内的this 就代表new Object()出来的对象。
<3>执行构造函数内的代码;
<4>返回新对象(后台直接返回)。

构造函数和普通函数的唯一区别,就是他们调用的方式不同。只不过,构造函数也是函
数,必须用new 运算符来调用,否则就是普通函数。

var box = new Box(‘Lee‘, 100);           //构造模式调用
alert(box.run());


Box(‘Lee‘, 20);                      //普通模式调用,无效


var o = new Object();
Box.call(o, ‘Jack‘, 200);                     //对象冒充调用
alert(o.run());

关于对象中的引用类型:

var box1 = new Box(‘Lee‘, 100);
var box2 = new Box(‘Lee‘, 100);

alert(box1.name == box2.name);     //true,属性的值相等
alert(box1.run == box2.run);          //false,方法其实也是一种引用地址
alert(box1.run() == box2.run());      //true,方法的值相等,因为传参一致

可见方法也是一个引用类型,每一个实例中的引用类型都是使用不同的地址;


javascript中对象的创建