对象
是什么:
1 js对象
狭义对象
js对象,用{ }大括号标识,特点:可以添加属性、属性可以访问。对象是拥有属性和方法的数据
什么是狭义对象:
一组无序的属性集合,它由若干键值对组成,JavaScript对象的键都是字符串类型,值可以是任意数据类型
var person = {
name: 'Bob',
age: 20,}
广义对象
我们认知的对象,window 、 Date 、Math
2 基本类型数据不是对象
number null undefined string boolean
为什么:
因为基本类型数据不能添加属性,不能拿到属性值,所以基本数据类型不是对象
3 json与js狭义对象
var p1 = {
"name":"along",
"age":31
}
json的属性必须加双引号,一般狭义对象不加引号的
var obj = {
"~~":"2019",
"国籍":"china",
"2018":2018
}
怎么使用对象
背景
我们操作DOM,js对象中包含DOM元素和方法,通过调用js对象的方法来操作DOM元素
访问属性
访问对象的属性有2中方法,点记法和索引发
xiaohong.name;
xiaohong['middle-school']; // 'No.1 Middle School'
1、点记法访问属性
点记法要求属性名必须是一个有效的变量名。
如果属性名包含特殊字符,就必须用''括起来,访问这个属性也无法使用.操作符,必须用['xxx']来访问
var xiaohong = {
name: '小红',
'middle-school': 'No.1 Middle School'
};
如果访问一个不存在的属性会返回什么呢?
JavaScript规定,访问不存在的属性不报错,而是返回undefined
判断一个属性在不在对象中
hasOwnProperty 、in
如果我们要检测xiaoming是否拥有某一属性,可以用in操作符
'name' in xiaoming; // true
不过要小心,如果in判断一个属性存在,这个属性不一定是xiaoming的,它可能是xiaoming继承得到的:'toString' in xiaoming; // true
要判断一个属性是否是xiaoming自身拥有的,而不是继承得到的,可以用hasOwnProperty()方法
xiaoming.hasOwnProperty('name'); // true
xiaoming.hasOwnProperty('toString'); // false
删除、新建属性
由于JavaScript的对象是动态类型,你可以自由地给一个对象添加或删除属性
xiaoming.age = 18; // 新增一个age属性
delete xiaoming.age; // 删除age属性
对象找属性
原型链查找机制
对象调用方法,先从自己里面找,如没有,就往上查找原型(__proto__)有没有,一直往上查找
__proto__、prototype都指向原型,表示同一个东西
原型
什么是原型
原型就是类
__proto__:是每个对象都有
prototype:是函数才会有的属性,两者指向同一个原型对象
创建对象
1、 直接用{ ... }创建一个对象
2、用构造方法创建对象
先定义一个构造函数
function Student(name) {
this.name = name;
this.hello = function () {
alert('Hello, ' + this.name + '!');
}
}
var xiaoming = new Student('小明');//写了new,它就变成了一个构造函数,它绑定的this指向新创建的对象,并默认返回this,也就是说,不需要在最后写return this;
xiaoming.name; // '小明'
xiaoming.hello(); // Hello, 小明!
判断一个属性在不在对象中
hasOwnProperty 、in
判断一个对象的实例
instanceOf
类型是什么
我们说的类型就是构造函数的名字的
继承
子类继承父类的属性和方法
怎么做
1、儿子的原型指向父亲。属性和方法
2、儿子的构造方法中调用父类的构造方法,仅属性
什么时候用继承
同城我们不用继承,直接new对象就可以了,只有需要修改父类方法时才需要继承