zoukankan      html  css  js  c++  java
  • Js整理备忘(03)——对象基础

    概念:对象表示“已命名的数据的无序集合”,这些已命名的数据通常被称为对象的属性,属性可以是任何类型的数据(数组、函数、对象…)。

    对象中的函数通常被称为该对象的方法

    类型:对象是复合数据类型,typeof()运算后返回类型为object

    特点:属性数量可以无限多,属性名为标识符或字符串,属性值可以为任意类型的数据。

    1、对象的创建

    (1)使用对象直接量,例下面的对象 stu 就是一个对象直接量:

    <script type="text/javascript" language="javascript">
        var stu = {
            id: 12,          //属性名通常是一个Js标识符
            name: "object",
            "age": 20,       //属性名也可以用字符串表示
            hobby: ["football", "drawing", "swimming"], //属性值可以是任意类型
            other: {a:1,b:"a sample"}
        };
        document.write(stu.hobby); //结果显示:football,drawing,swimming
    </script>
     

    (2)使用new运算符

    new运算符创建具体的一类对象,例:

    <script type="text/javascript" language="javascript">
        var o = new Object();           //创建一个空对象
        var a = new Array(1,2,"asd");   //创建一个数组对象
        var s = new String("a string"); //创建一个字符串对象
        o.x = 123;
        o.str = "asd";          //给对象o添加属性,此处的x与str是标识符
        document.write(o.str);  //输出"asd"
    </script>
    这里的Object()、Array()、String()都是核心Javascript(以下简称Js)的一部分,另外常用的还有Date()、RegExp()等。
     

    (3)使用自定义的构造函数创建对象

    要理解这种方式,首先要对构造函数的概念有一个认识,从字面上不难判断,构造函数的类型应该为函数(function)。实际上,上文(2)中所用的Object,Array,String本身都是一个构造函数。如:typeof (Object); typeof (Array); typeof(String); 返回类型都为function;

    构造函数可以用来创建对象,创建的对象实例的类型为object。

    如:typeof(o); typeof(a); typeof(s); 返回类型都为object。

    先举个简单的例子说明这种创建方法:

        functionfn() {this.x = "x";}//定义一个简单的函数fn
        varfo = newfn();  //创建构造函数fn的一个对象实例fo

    理论上,任何函数都可以作为构造函数来创建对象实例,函数与对象之间的关系非常微妙,由于目前对函数了解还不够深入,以后会详细说明。

    有兴趣的话可以看看这篇文章:为什么Object.prototype.isPrototypeOf(Function)是true

    2、对象的存取

    Javascript(以下简称Js)对象的存取方式有两种:object.property 或者 object["property"]。最大的区别是:前者的属性名是标识符;后者的属性名是字符串。

    标识符不是一种数据类型,使用时必须逐字输入,且程序不能对其操作;而字符串是Js的一种数据类型,因此可以在程序运行的过程中对其操作。

    关联数组(associative array)

    如果使用一个对象时采取object["property"] 这种形式,我们常常称它为关联数组,它是一个数据结构,允许动态将任意字符串和任意类型的数据关联。

    例如要读取某个对象的所有属性时,用点"."操作就显得不太合理,因为"."后面的属性名(标识符)必须事先知道是如何拼写的。而用"[]"则可以很方便地做到。

    <script type="text/javascript" language="javascript">
        var obj = {
            id: 12, name: "object", "age": 24, 
            hobby: ["football", "drawing", "swimming"],
            other: {a:1,b:"a sample"}
        };
        for (p in obj) {
            document.write(p + ":" + obj[p]+" ; "); //此处p是个变量,不用管它究竟表示哪个具体的字符串
        }
    </script>

    页面显示结果为:id:12 ; name:object ; age:24 ; hobby:football,drawing,swimming ; other:[object Object] ;

    3、对象中通用且比较重要的属性和方法

    明确一个概念:Js中所有对象都继承自Object类。

    (1)constructor(构造函数) 属性

    Js中每个对象都具有该属性,它引用该对象的构造函数。

    例如:var d=new Date(); 那么 d.constructor 引用构造函数Date(即表达式d.constructor==Date值为true)。

    由此可见,constructor属性有助于确定该对象的类型。例如:

    if((typeof o == "object") && (o.constructor == Date))

    在上一篇介绍的运算符中提到 instanceof 运算符,也用于确定对象的类型。上面的写法也可以如下:

    if((typeof o == "object") && (o instanceof Date)) // 若o为Date的一个对象实例,则返回true

    要对constructor属性有更深入的了解,可以参考一下这篇文章:再补点基础:Javascript的构造函数和constructor属性 

    (2)isPrototypeOf()方法

    说明:如果isPrototypeOf()方法所属的对象是参数的原型对象,则该方法返回true

    原型(prototype)也是Js中比较复杂而又非常的重要的概念,一开始可能会很难理解,此处也不适合详细说明,只能大概了解。举几个例子:

    <script type="text/javascript" language="javascript">
        var o = {};
        alert(Object.prototype.isPrototypeOf(o));       //true: o.constructor==Object
        alert(Function.prototype.isPrototypeOf(Object));//true: Object.constructor==Function
    </script>
    关于Object和Function的关系,可以参考为什么Object.prototype.isPrototypeOf(Function)是true 
     
     
     对象是Js中非常重要的概念,后面的学习几乎都离不开对象,本节先写到这里。
     
  • 相关阅读:
    magic_quotes_gpc(魔术引号开关)
    获取文件绝对路径:__FILE__与 $_SERVER[SCRIPT_FILENAME''] 的 区别
    小程序wx:key中的关键字*this
    swiper 更改indicator-dots 属性 隐藏面板指示点
    B站视频下载
    makefile教程
    Qt 中配置 c99的问题
    C语言编译过程及相关文件
    go语言入门(10)并发编程
    go语言入门(9)文本文件处理
  • 原文地址:https://www.cnblogs.com/gppblog/p/1645136.html
Copyright © 2011-2022 走看看