zoukankan      html  css  js  c++  java
  • 面向对象与原型(一)

     一、创建对象

    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对象,如果在构造函数体内,就代表当前构造函数所申明的对象。

  • 相关阅读:
    Codeforces 1491 D. Zookeeper and The Infinite Zoo (二进制处理)
    Codeforces 1479A. Searching Local Minimum(注意输入+二分)
    Codeforces 1480B. The Great Hero(阅读模拟题,注意数据范围和攻击顺序)
    Codeforces 1480A. Yet Another String Game (阅读理解题)
    windows 10 开启全盘瞬间索引功能
    JetBrains CLion C++ IDE连接wsl2(Ubuntu)时,报错"Unable to establish SSL connection"解决方案
    WorkFlowy 的 MarkDown 预览方案解决
    git 学习 完全学懂
    jeecgboot <j-popup
    面试之类加载器
  • 原文地址:https://www.cnblogs.com/hynb/p/5824336.html
Copyright © 2011-2022 走看看