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

对象在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.认识对象)