一、JavaScript对象创建对象添加属性读取属性修改属性删除属性对象字面量二、JavaScript函数创建函数调用函数立即执行函数三、JavaScript方法四、JavaScript作用域全局作用域函数作用域五、this六、构造函数七、原型prototype一、JavaScript对象 对象属于一种复合的数据类型,在对象中可以保存多个不同数据类型的属性 对象的分类:1。内置对象由ES标准中定义的对象,在任何的ES的实现中都可以使用2。宿主对象由JS的运行环境提供的对象,目前来讲主要指由浏览器提供的对象如:BOMDOM3。自定义对象由开发人员自己创建的对象创建对象 varobjnewObject();var对象名newObject()使用new关键字调用的函数,是构造函数constructor,构造函数是专门用于创建对象的函数添加属性 在对象中保存的值成为属性obj。对象。属性名属性值obj〔123〕789;对象〔属性名〕属性值属性名不强制要求遵守标识符规范,但是使用特殊的属性名时只能采用对象〔属性名〕属性值的声明方式在〔〕中可以直接传递一个变量,这样变量值是多少就读取哪个属性读取属性 obj。对象。属性名读取对象中没有的属性,不会报错,会返回undefinedobj〔123〕;对象〔属性名〕 in运算符:检查一个对象及其原型中是否含有指定的属性如果有则返回true,否则返回属性名in对象 hasOwnProperty()检查对象自身中是否含有该属性修改属性 obj。nametom对象。属性名新值删除属性 deleteobj。namedelete对象。属性名对象字面量 用于创建对象varobj{}; 使用对象字面量时可以在创建对象时,直接指定对象中的属性varobj{name:zby};var对象{属性名:属性值,属性名:属性值}二、JavaScript函数 函数也是一个对象,可以封装一些功能(代码),在需要时可以执行这些功能(代码)创建函数函数对象varfunnewFunction();使用typeof检查函数对象时,会返回function函数声明function函数名(〔形参1,形参2〕){语句;}函数表达式var函数名function(〔形参1,形参2〕){语句;}调用函数 fun();函数对象()调用函数时,函数中封装的代码会按照顺序执行,使用函数的返回值 调用函数时解析器不会检查实参的类型也不会检查实参的数量,多余实参不会被赋值。 break退出当前的循环continue跳过当次循环return结束整个函数立即执行函数 (function(形参1。形参2){语句;})(实参1,实参2) 函数定义后,立即被调用,往往只会执行一次三、JavaScript方法 如果一个函数作为一个对象的属性保存,我们则称这个函数是这个对象的方法。调用函数就是调用对象的方法(只是名称上的区别,实质上没有区别)varobjnewObject();obj。obj。sayNamefunction(){console。log(obj。name);}obj。name();调方法 functionfun(){console。log(obj。name);}fun();调函数 使用forin语句,枚举对象中的属性for(var变量in对象){}每次执行时,将对象中的一个属性名称赋值改变。四、JavaScript作用域 作用域:一个变量作用的范围全局作用域直接编写在script标签中的js代码,都在全局作用域中。全局作用域在页面打开时创建,在页面关闭时销毁。在页面任意部分都可以访问到在全局作用域中有全局对象window,可以直接使用。window代表浏览器的窗口,由浏览器创建。在全局作用域中,创建的变量都会作为window对象的属性保存创建的函数都会作为window对象的方法保存变量的声明提前:使用var关键字声明的变量,会在所有代码执行之前被声明函数的声明提前:使用函数声明形式创建会在所有代码执行之前就被创建函数function函数(){}函数作用域调用函数时创建函数作用域,函数执行完毕以后,函数作用域销毁每调用一次函数就会创建一个新的函数作用域,他们之间相互独立在函数作用域中可以访问到全局作用域的变量,在全局作用域中无法访问到函数作用域的变量在函数作用域操作一个变量时,先在自身作用域中寻找,若是没有则在上一级作用域中寻找,若全局作用域中仍未找到则报错ReferenceError在函数中访问全局变量可以使用window对象全局作用域中适用的变量的提前声明和函数的提前声明在函数作用域中仍适用函数中不使用var声明的变量都会变为全局变量五、this 解析器在调用函数每次都向函数内部传递一个隐含参数thisthis指向一个对象,这个对象是函数执行的上下文对象根据函数的调用方式不同,this指向不同的对象以函数形式调用时,this永远都是window以方法形式调用时,this就是调用方法所对应的对象以构造函数形式调用时,this就是新创建的那个对象六、构造函数构造函数就是一个普通的函数,创建方式和普通函数没有区别构造函数习惯上首字母大写普通函数是直接调用,构造函数需要使用new关键字调用 functionPerson(){}varpernewPerson();构造函数调用varper0Person();普通函数调用 构造函数执行流程:立刻创建一个新的对象将新建的对象设置为函数中的this,在构造函数中可以使用this引用新建的对象逐行执行函数中的代码将新建的对象作为返回值返回 使用同一个构造函数创建的对象,我们称为一类对象,也将一个构造函数称为一个类。我们将通过一个构造函数创建的对象,称为是该类的实例。 使用instanceof可以检擦一个对象是否是一个类的实例对象instanceof构造函数是返回否返回false七、原型prototype 解析器会向每个函数中添加一个属性prototype,prototype属性对应着一个对象,这个对象就是我们所谓的原型对象。 原型对象就相当于一个公共区域,所有同一个类的实例都可以访问到这个原型对象,我们可以将对象中共有的内容,统一设置到原型对象中。 当我们访问对象的一个属性或方法时,先在对象自身中寻找,如果没有则去原型对象中寻找。 当函数作为普通函数调用时,没有任何作用当函数作为构造函数调用时,她所创建的对象中都会有一个隐含的属性指向该构造函数的原型对象,我们可以通过proto来访问该属性 functionMyClass(){}MyClass。prototype。a123;varmcnewMyClass();console。log(MyClass。prototypemc。proto)true