JS面向对象--1.认识对象

作者: FF_C | 来源:发表于2017-11-28 16:53 被阅读0次

    对象在JS中有狭义对象和广义对象

    所谓的狭义对象 就是用{}这种字面量的形式定义的对象 它是一组属性的无序集合

    //狭义对象,就是一组值的封装,除了4个值之外,什么都没有

    var obj = {
    
    name: "小明",
    
    age: "12",
    
    sex: "男",
    
    hobby: ['打球','看电视']
    
    }
    
    alert(obj.hobby[1])  //看电视
    

    上面这个对象,表示一个 人 ,里面有4个属性

    比如我们现在不用对象 ,而是使用数组来存存储一组刚才的值

    var 0 =['小明',12,'男','['打球','看电视']']
    
    alert(o[1])   //Uncaught SyntaxError: Unexpected number
    

    数组只能存储值 ,不能存储健,换句话说,数组里的值 的 "语义"并不详细,对象除了能存储值,还能存储语义。

    值 的语义,属于上叫做keys,健

    也就是说:对象就是一组值和语义的封装

    //广义对象 是一个对象 ,但是你感觉它除了一组属性还有别的东西

    比如DOM元素是对象 ,但是和我们刚才说的狭义对象”里面只有一组值 别的什么 都没有“不同

    // 下面这个O是一个DOM元素,它也是一个对象

    var 0 =  document.getElementById('box');   //得到一个DOM对象
    
    alert(typeof o);   //object
    

    //下面给这个DOM元素添加属性

    o.name = "小 明";
    
    o.age =12;
    
    alert(o.age)
    

    我们通过DOM方法得到了一个DOM对象,此时可以通过点语法来给这个对象添加属性name,sex,hobboy属性。此时可以通过o.name访问他的name属性。此时 ,你不能说主穿上对象 只有name,age,hobby这三个属性,别的什么 都没有。因为这个o 毕竟是有一个HTML标签实体在页面上

    //数组也是对象

    我们也可以通过点语法 给数组添加属性

    arr.name='小红';
    
    arr.age=12;
    
    arr.hobby =['打架','抽烟','喝酒'];
    
    alert(arr.sex);
    

    说 明数组有对象的一切特征,就是能够添加属性,但你不能说这个数组此时只有name age hobby三个属性

    别的都没有 ,毕竟他有一组数

    函数也是对象 ,但是typeof运算符检测类型 ,返回的结果 是function,不是object,这是系统规定,但是
    function也是object

    function fun(a,b){
    
    alert(a+b)
    
    }
    
    //此时我们要证明这个fun也是一个对象,怎么证明 ,给他加属性,如果能加上属性就说明是对象
    
    alert(typeof fun);  //function
    
    fun.name ='小刚',
    
    fun.age =34,
    
    fun.hobby = ['lol','DOTA','cs']
    
    alert(fun.name)
    

    此时对象添加属性成功,添加了三个属性,但是你不能说这个fun对象就只有三个属性别的什么都没有,因为它毕竟 是一个函数,能够加圆括号执行

    再比如,正则表达式也是对象

    var regexp = /\d/g;
    
    alert(typeof regexp);  //object
    
    regexp.name ='小青';
    
    alert(regexp.name);
    

    添加属性成功 但你不能说它只有这几个属性 毕竟它是一个正则

    也就是说 系统内置的所有引用类型值 都是对象 ,他们都能添加自定义属性 并且能够访问这些属性

    比如
    {}对象

    function函数

    array数组

    regexp正则表达式

    DOM元素

    window ,document,Math,Date对象

    Number,String内置包装构造函数得到的值

    但是这些对象除了一组属性之外,还有其他的东西,比如数组还有一组值;比如函数还有一组语句,能够圆括号执行

    什么不是对象,就是系统的基本类型值

    数字不能加属性,因为数字是基本类型值,不是对象

    var a =100;
    
    a.name ='小强';
    
    a.age =12;
    
    alert(a.age); //undefined
    

    //a不是一个对象 a是通过字面量增加的

    var str ='你好';
    
    str.haha=123;
    
    alert(str.haha) //undefined
    

    字符串不能加属性,因为字符串是基本类型值,不是对象。

    那么到底有什么性质,我们就称它是对象呢?能够添加属性。特别的,微观层面,只要这个东西存放在堆内存中,就可以认为是一个对象。

    相关文章

      网友评论

        本文标题:JS面向对象--1.认识对象

        本文链接:https://www.haomeiwen.com/subject/sbjebxtx.html