对象
对象属于一种复合的数据类型,在对象中可以保存多个不同数据类型的属性。
对象的分类:
- 内建对象.
- 由ES标准中定义的对象,在任何的ES的实现中可以使用
- 比如:Math String Number Boolean Function Object...
- 宿主对象
- 由JS的运行环境提供的对象,目前来讲主要是指由浏览器提供的对象
- 比如BOM DOM
- 自定义对象
- 由开发人员自己创建的对象
对象的基本
对象的基本操作
创建对象
使用
new
关键字调用的函数,是构造函数----专门用来创建对象的函数。使用typeof检查对象,返回object- 添加对象属性
obj.xxx = xxx;
- 修改对象属性
obj.xxx = xxx;
- 删除对象属性
delete obj.xxx;
- 查看对象属性
console.log(obj.xxx);
属性名
- 对象属性名不强制要求遵守标识符的规范
- 如果使用特殊属性名,不能采用
.
的方式来操作。需要使用另一种方式
对象["属性名"] = 属性值
存取一致。
- 使用
[]
操作属性更加灵活。[]
里可以直接传递一个变量,根据变量值读取相应属性。
var obj = new Object();
obj["233"] = 888;
var n = "233";
console.log(obj[n]);//888
属性值
可以是任意的数据类型。也可以是一个对象
console.log(obj1.obj.name);
in 运算符
通过该运算符可以检查一个对象中是否含有指定的属性。如果有返回true,没有返回false
语法:"属性名" in 对象
console.log("test" in obj);
引用数据类型
保存的是地址,是引用.保存到堆内存中,每创建一个新的对象,就会在堆内存中开辟一个新的空间,而变量保存的是对象的内存地址。如果两个变量保存的是同一个对象引用,当一个通过一个变量修改属性时,另一个也会收到影响。
基本数据类型【除了object的另外五种】,保存的是 值
var obj1= new Object();
var obj2 = obj1;
obj2 =null ;//这里是obj2的地址值设为null。不改变堆内存中的值
console.log(obj1); //object Object
var obj1= new Object();
var obj2 = obj1;
obj1.name ="奇奇怪怪" ;
obj1.sex = "男";
obj2.name ="dddd";
//删除,更改都会 对应的变
delete obj2.sex;
console.log(obj1.name); // dddd
console.log(obj2.sex); // undefined
console.log(obj1.miao); //undefined ,对象的属性会输出 未定义。
对象字面量
语法:
{属性名:属性值,属性名:属性值..}
对象字面量属性名可以加引号也可以不加,建议不加。如果要使用一些特殊的名字,必须加引号。
属性名和属性值是一组一组的名值对结构,名和值之间使用
:
链接,多个名值对之间使用,
隔开。最后的不加,
var obj = {
"name":"第三类",
sex:"男",
age:33,
text:{name:"的第三个"} //{}里面的是值。赋给了 t
}
以工厂方法创建对象。
为了方便创建重复类型的对象,使用工厂方法。
function createObj(name , gender , age){
var obj = new Object();
obj.name = name ;
obj.gender = gender;
obj.age = age;
obj.sayName = function (){
console.log(this.name);
}
return obj;
}
var obj1 = createObj("miao","nan",16);
console.log(obj1);
obj1.sayName();
以构造函数的方式批量创建对象
创建一个构造函数,专门用来创建
Person
对象。
- 构造函数就是一个普通的函数,创建方式和普通函数
没有区别
。。- 不同的是构造函数
习惯上首字母大写
构造函数和普通函数的区别是调用方式不同
- 普通函数普通调用,构造函数需要使用
new
关键字来调用
构造函数的执行流程
- 立即创建一个新的对象
- 将新建的对象设置为函数中
this
,在构造函数中可以使用this
来引用新建的对象- 逐行执行函数中的代码
- 将新建的对象作为
返回值返回
使用同一个构造函数创建的对象,我们成为一类对象,也将一个构造函数
称为一个类
。 将通过一个构造函数创建的对象,称为该类的
实例
function sayName (name){
console.log(this.name);
}
function Person(name,gender,age){
this.name = name ;
this.gender = gender;
this.age = age ;
this.sayName = sayName;
}
var miao = new Person("hero","nan",15);
console.log(miao);
miao.sayName(); /
构造函数修改
方法定义在构造函数内部,每执行一次构造函数,就会创建一个对象方法 。 ====>
将对象的方法在全局作用域中定义。
function fun(){
}
function Person(name,age){
this.name =name;
this.age = age;
this.sayName = fun;
}
var per1 = new Person();
var per2 = new Person();
console.log(per1.sayName == per2.sayName);//true