adodo0829 / blog

搭建知识体系
29 stars 4 forks source link

对象类型(属性和方法) #27

Open adodo0829 opened 4 years ago

adodo0829 commented 4 years ago

对象及其属性和方法

对象: 是一种复杂的数据类型,它将许多值(原始值或者其他对象)聚合在一起,可通过名字访问这些值; 对象也可看做是属性的无序集合,每个属性都是一个键值对; 属性键名是字符串,因此我们可以把对象看成是从字符串到值的映射.

对象创建

new构造函数, 对象直接量, Object.create()函数

// 参数为空,null,undefined: {}

// 参数为对象; 返回这个对象

// 参数为原始值类型: 返回其包装对象 var n = new Object(1) // { proto: Number, [[PrimitiveValue]]: 1 }

// Object(params) 将参数转换为对象

- 字面量创建实例对象

var person = { name: 'huhua', age: 26, 1: true }; 属性名会自动转换成字符串

- Object.create(p1, p2)创建实例对象

第一个参数就是这个对象的原型 第二个可选参数用以对对象的属性进行进一步描述

var o1 = Object.create({x:1,y:1}); // o1的原型指向这个对象;继承了属性x和y console.log(o1.x); // 1

var o2 = Object.create({z:3},{ x:{value:1,writable: false, enumerable:true, configurable:true}, y:{value:2,writable: false, enumerable:true, configurable:true} }); console.log(o2.x, o2.y, o2.z);// 1 2 3

传入 null

创建一个没有原型的新对象,但通过这种方式创建的对象不会继承任何东西

var o2 = Object.create(null); // o2不继承任何属性和方法, 是一个纯净的数据容器

## 对象成员
对象是属性的无序集合,由键名和属性值组成.
键名: 
> 键名都是字符串,所以加不加引号都可以,如果不是字符串也会自动转换成字符串
> 键名不符合标识符命名规则,则必须加上引号

属性值:
> 属性值可以是任何类型的表达式,最终表达式的结果就是属性值的结果
> 属性为函数时,通常称为方法, 也有 name 属性

## 对象引用
不同的变量名指向同一个对象,那么它们都是这个对象的引用,也就是说指向同一个内存地址。修改其中一个变量,会影响到其他所有变量.
如果取消某一个变量对于原对象的引用,不会影响到另一个变量

## 对象的实例方法
- valueOf()

valueOf()方法会返回当前对象

var o = { name: 'huhua' } console.log(o.valueOf()) // { name: 'huhua' }

- toString()

toString()方法返回当前对象对应的字符串形式

var o1 = new Object(); o1.toString() // "[object Object]"