面向对象

一.对象的创建及常用操作

(1,3其实差不多,少量的时候可以使用)

 1.使用new运算符

  var user = new Object();

  user.name = '编程浪子';

  user.age = 22;

  user.address = '四川成都';

 2.对象字面量

  var user = {

    name:'编程浪子',

    age:22,

    address:'四川成都'

  };

 3.简单方式(传统的赋值方法)

  var user = {};

  user.name= '编程浪子';

  user.age = 22;

  user.address = '四川成都';

 4.属性的调用

  a.alert(user.name + "   " + user.age);

  b.alert(user['name'] + "   " + user['age']);

 5.添加方法

  var user = {

      name:'编程浪子',

    age:22,

    address:'四川成都',

    showInfo:function(){//添加一个方法

      alert(this.name+"  " + this,age + "  " +this.address);

    },

    showHello:showHello//将对象外部的方法添加到对象

  };

  function showHello(){

    alert('hello');

  }

  user.showInfo(); //调用方法

  user.showHello();

========================================================================

上面只是简单的封装一个对象,如果要封装很多个对象,就好出现很多相同的代码

1.工厂模式

  优点:解决了实例化时代码大量重复的问题

  缺点:识别问题,无法知道到底是哪个对象的实例(alert (typeof obj1)//object)

  function create(name,age){

    var obj = new Object();

    obj.name = name;

    obj.age = age;

    obj.show = function(){

      return this.name + '  ' + this.age;

    }

    return obj;

  }

  var obj1 = create('bclz',30); //第一个实例

  var obj2 = create('bclz',20); //第二个实例

  alert(obj1.show());

  alert(obj2.show());

2.构造函数

  优点:解决工厂模式的缺陷

  缺点:每个方法都要在实例上重新创建一次

  function User(name,age){

    this.name = name;

    this.age = age;

    this.show = function(){

      return this.name +'  ‘+this.age;

    };

  }

  var user1 = new User('bclz',30);//第一个实例

  var user2 = new User('bclz',20);//第二个实例

  现在我们就可以检测user1或者user2是不是属于User。

  alert(user1 instanceof User);//true

========================================================================

我们需要引入另外一个javascript面向对象的重要概念**原型**

  function SuperType(){
  }
  // alert(SuperType.prototype);//类型 prototype隐藏属性
  // alert(SuperType.prototype.constructor); //指向function本身
  function Cat(name,color){
    this.name = name,
    this.color = color
  }
  Cat.prototype.type = "猫科动物";
  Cat.prototype.eat = function(){
    alert("吃老鼠");
  }
  var cat1 =new Cat("大毛","黄色");
  var cat2 =new Cat("二毛","黑色");
  alert(cat1.type);
  //指向同一个内存地址,提高了运行效率
  alert(cat1.type == cat2.type);

原文地址:https://www.cnblogs.com/xiaoxiaozhao/p/4103898.html