zoukankan      html  css  js  c++  java
  • 面向对象

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

    (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);

  • 相关阅读:
    MySql 定时完成备份
    smarty插件
    PHP字符串函数小结
    eclipse搭建maven project的spring4 spring mvc mybatis
    C#数组存入引用类型
    C#数组
    【转】Linus:利用二级指针删除单向链表
    [LeetCode] Reverse Linked List II
    ubuntu配置git
    mint安装Node.js
  • 原文地址:https://www.cnblogs.com/xiaoxiaozhao/p/4103898.html
Copyright © 2011-2022 走看看