javascript创建对象简单介绍

快乐打工仔 分类:实例代码

ECMAScript有两种开发模式:

1.函数式(过程化);

2.面向对象(OOP);

创建对象:

(1).普通的创建对象:

// 创建一个对象,然后给这个对象新的属性和方法;
var box = new Object();// 创建一个Object对象;
box.name = 'lee';// 创建一个name属性并赋值;
box.age = 100;
box.run = function(){// 创建一个run()方法并返回值;
  return this.name+this.age+'运行中...';
} 
console.log(box.run());// 输入属性和方法的值;
// 缺点:想创建类似的对象,就会产生大量的代码;

(2).工厂模式创建对象:

// 这种方法就是为了解决实例化对象产生大量代码重复的问题;
  function createObject(name,age){// 集中创建函数体;
    var obj = new Object;// 函数体内创建Object;
    obj.name = name; 
    obj.age = age;
    obj.run = function(){
      return this.name+this.age+"运行中...";
    };
    return obj;
  }
  var box1 = createObject("lee",100);// 实例化;调用函数并传参;
  var box2 = createObject("jack",200);// 实例二;
  console.log(box1.run()+box2.run());// 实例保持相对独立;
// 缺点:对象与实例的识别问题;无法搞清楚它们到底是那个对象的实例;
  console.log(typeof box1);// Object;

(3).构造函数创建对象:

// ECMAScript采用构造函数(构造方法)可用来创建特定的对象;
  function Box(name,age){// 构造函数模式;
    this.name = name;// this代表对象Box;
    this.age = age;
    this.run = function(){
      return this.name+this.age+"运行中...";
    };
  }
  var box1 = new Box("lee",100);// 要创建对象的实例必须用new操作符;
  var box2 = new Box("jack",200);// box1和box2都是Box对象的实例;
  console.log(box1 instanceof Box);// true;很清晰的识别box1从属于Box;
// 使用构造函数,即解决了重复实例化的问题,有解决了对象识别的问题;

使用构造函数与工厂模式不同之处:

(1).构造函数方法没有显示的创建对象(new Object);

(2).直接将属性和方法赋值给this对象;

(3).没有return语句;

构造函数规范:

(1).函数名(function Box)和实例化构造名(new Box)相同且大写;

(2).通过构造函数创建实例对象,必须使用new运算符;

//构造函数和普通函数的区别:
  var box = new Box('lee',100);// 构造模式调用;
  Box('lee',200);// 普通模式调用,无效;
  var o = new Object();
  Box.call(o,'jack',200);// 对象冒充调用;
  // 将Box对象作用域扩充到对象o;Box()方法的运行环境已经变成了对象o里;

构造函数的问题:

使用构造函数创建每个实例的时候,构造函数里的方法都要在每个实例上重新创建一遍;

因为ECMAScript中的函数是对象,因此每定义一个函数,也就是实例化了一个对象;

以这种方式创建函数,会导致不同的作用域链和标识符解析;

回复

我来回复
  • 暂无回复内容