zoukankan      html  css  js  c++  java
  • javascript——对象的概念——创建对象与销毁对象

    一、创建对象

    1、创建空对象

    方式一:

    var o ={};o;  //Object {}

    typeof(o);  //"object"

    方式二:

    var o=new Object();o;//Object {} 

    typeof(o);//"object"

    2、创建非空对象

    在 javascript 中创建对象有两种方式:对象文本标记法、构造器函数定义对象;

    方式一:对象文本标记法:

    先上例子:

      

     1     var hero= {
     2                  name:'小明',
     3                  Sex:'男',
     4                  say: function(){ return this.name+': 您好!';}
     5     };
     6     hero.name;    //"小明"
     7     hero.Sex;       //男"
     8     hero.say();     //"小明: 您好!"
     9     hero['name'];    //"小明"
    10     hero['Sex'];       //男"
    11     hero['say']();     //"小明: 您好!"
    12     var a='name';  hero[a];    //"小明"
    创建对象——文本标记法

    采用文本对象标记法定义对象要注意以下问题:

    • 定义一个对象时要用{},但与函数不同的是无关键字 function;
    • 对象内部格式:  属性名:属性值,不同属性值之间用 “,” 隔开;
    • 对象内部 this 表示当前对象;
    • 调用对象的方法和属性有两种方式如下:hero.name; 和 hero['name']; 后一种类似于数组的方式可以采用动态方式

    文本对象标记法与函数的区别:

      文本对象标记法 函数
    区别 无关键字 function 有关键字 function
    语法 var n={} var n=function(){}或
    function n(){}

    方式二:构造器函数法:

    例子:

     1     function people(name)
     2     {
     3           this.name=name;
     4           this.sex='男';
     5           this.say=function(){return this.name+': 您好!';};
     6     }
     7     var hero=new people('小强');
     8     hero.name;    //"小强"
     9     hero.sex;    //"男"
    10     hero.say();    //"小强: 您好!"
    11     hero['name'];    //"小强"
    12     hero['sex'];    //"男"
    13     hero['say']();    //"小强: 您好!"
    14     var a='sex'; hero[a];    //"男"    
    创建对象——构造器函数法

     采用文本对象标记法定义对象要注意以下问题:

    • 构造器函数与函数类似:都有function,但构造器均有 this 指向当前对象,否则无法调用;

    文本对象法与构造器函数法的不同点:

      文本对象法 构造器函数法
    实例化? 直接创建对象,无需实例化 创建的只是一个用于创建对象的构造器函数,必须用构造器函数法实例化对象
    对象个数? 只能创建一个 可以实例化多个对象;利用构造器函数的参数可以创建内容不一样的对象
    this?   表实例化之后的对象。

    二、实例对象、类对象

    上面的构造器函数法使用 this 表示正在实例化的对象。即使用 this 的属性是属于实例化对象的。还有一种绑定到构造函数,表示类的属性,类似于 C# 中的静态属性,是属于所有由该构造函数实例化的对象共有的。

    例:

    1         function people(name,s,age){ this.name=name;sex=s;people.age=age;};
    2         var a=new people('小强','男',24);
    3         var b=new people('小丽','女',20);
    4         a.name;        //"小强"
    5         b.name;        //"小丽"
    6         a.sex;        //undefined
    7         a.age;        //undefined
    8         people.age;    //20
    9         sex;    //"女"
    实例化对象属性例子

    如上实例化两个实例,每个实例都可以访问到属于自己的(用 this 绑定到实例化对象的,在此为 name)属性;使用构造器函数名绑定到类的属性(在此为绑定到people的属性 age )则无法使用实例化对象访问到,只能使用构造器函数访问到;而即未使用 this 又未使用构造器函数名绑定的属性sex,在此为全局变量,可以直接访问。

    修改如下:


    通过函数的方式访问类属性。

    三、对象废除

      对于javascript 语言,其拥有无用存储单元收集程序,意味着我们可以不必专门销毁对象来释放内存。如果再没有对对象的引用时,当运行无用存储单元收集程序时,即可销毁所有的对象。但作为一个良好的习惯,把对象的所有引用都设置为 null,可以强制性地废除对象。例如:hero=null;当对象变量 hero 设置为 null 后,对第一个创建的对象的引用就不存在了。这意味着下次运行无用存储单元收集程序时,该对象将被销毁。

    注意:废除对象的所有引用时要当心。如果一个对象有两个或更多引用,则要正确废除该对象,必须将其所有引用都设置为 null。

    四、早绑定和晚绑定

    绑定:把对象的接口与对象实例结合在一起的方法。

      • 早绑定:指在实例化对象之前定义它的属性和方法,这样编译器或解释程序就能够提前转换机器代码。ECMAScript 不是强类型语言,所以不支持早绑定。
      • 晚绑定:编译器或解释程序在运行前,不知道对象的类型。使用晚绑定,无需检查对象的类型,只需检查对象是否支持属性和方法即可。ECMAScript 中的所有变量都采用晚绑定方法。这样就允许执行大量的对象操作,而无任何惩罚。
      • 极晚绑定:从技术上讲,根本不存在极晚绑定。本书采用该术语描述 ECMAScript 中的一种现象,即能够在对象实例化后再定义它的方法。

    例如:

    1     function people(name)
    2         {
    3               this.name=name;
    4               this.sex='男';
    5               this.say=function(){return this.name+': 您好!';};
    6         }
    7         var hero=new people('小强');hero.name;        //"小强"
    8     people.prototype.likething=function(){return this.name+':喜欢吃零食。';};
    9     hero.likething();    //"小强:喜欢吃零食。"
    View Code

      在大多数程序设计语言中,必须在实例化对象之前定义对象的方法。这里,方法 sayHi() 是在创建 Object 类的一个实例之后来添加进来的。在传统语言中不仅没听说过这种操作,也没听说过该方法还会自动赋予 Object 对象的实例并能立即使用。

    注意:不建议使用极晚绑定方法,因为很难对其跟踪和记录。不过,还是应该了解这种可能。

     

  • 相关阅读:
    maven 利用 profile 进行多环境配置
    基于 TrueLicense 的项目证书验证
    SpringMVC 自定义参数解析器.
    Spring MVC -- 基于注解的控制器
    Spring MVC -- Spring MVC入门
    Spring MVC -- MVC设计模式(演示4个基于MVC框架的案例)
    Spring MVC -- Spring框架入门(IoC、DI以及XML配置文件)
    Servlet2.5版本和Servlet3.0版本
    Java基础 -- 深入理解泛型
    Java基础 -- 深入理解Java类型信息(Class对象)与反射机制
  • 原文地址:https://www.cnblogs.com/SunBlog/p/4044078.html
Copyright © 2011-2022 走看看