对象 是什么: 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对象就可以了,只有需要修改父类方法时才需要继承