面向对象与原型(一)

 一、创建对象

var box = new Object();        //创建一个Object对象
box.name = 'Lee';               //创建一个name属性并赋值
box.age = 100;                   //创建一个age属性并赋值
box.run = function(){
      return this.name + this.age+'运行中....';   
}

var box2 = box;                           //得到box的引用  此时box2和box引用的是同一个地址里的对象
box2.name = 'Jack';                       //直接改变了box对象里的name属性
alert(box2.run());                        // Jack100运行中...

上面创建了一个对象,这种是JavaScript创建对象最基本的方法,但有个缺点,想创建一个类似的对象会产生大量的代码。

var box2 = new Object();                  //重新创建一个Object对象
box2.name = 'Lee';                        //创建一个name属性并赋值
box2.age = 100;                           //创建一个age属性并赋值
box2.run = function(){
      return this.name + this.age+'运行中....';   
}
alert(box2.run());                           //这样才和box区分开来。并且独立

二、工厂模式

funciton createObject(name,age){            //集中实例化的函数
  var obj = new Object();   
  obj.nane = name;
  obj.age = age;
  obj.run = function(){
    return this.name + this.age+'运行中....'; 
  };
  
  return obj;        //返回对象              
      
}


var box1 = createObject('Lee',100);          //第一个实例
var box2 = createObject('Howie',200);        //第二个实例

//两个实例都是独立的

缺点:识别问题,无法搞清楚他们是那个对象的实例。对象都是Object。

alert(typeof box1);                                  //object
alert(box1 instanceof Object);                       //ture

三、构造函数

ECMAScript中可以采用构造函数(构造方法)可用来创建特定的对象。类型于Object对象

function Box(name,age){                              //创建一个对象,所有构造函数的对象其实都是Object
  this.name = name;
  this.age = age;
  this.run = function(){
    return this.name + this.age + '运行中..';
  };
}
var box1 = new Box('Jack',200);                     

alert(box1 instanceof Object);                      //true
alert(box1 instanceof Box);                          //true 清晰的识别box1实例的对象为Box

使用了构造函数的方法,和使用工厂模式的方法他们不同之处如下:

1.构造函数方法没有显示的创建对象(new Object());
2.直接将属性和方法赋值给this 对象;
3.没有renturn 语句。

 

构造函数的方法有一些规范:

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

  

关于this的使用,this其实是代表当前作用域的对象的引用。

如果是全局范围this就代表window对象,如果在构造函数体内,就代表当前构造函数所申明的对象。

原文地址:https://www.cnblogs.com/hynb/p/5824336.html