欢迎来到天天文库
浏览记录
ID:8978539
大小:28.13 KB
页数:6页
时间:2018-04-13
《js构造函数、原型链、ajax笔记》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、一、This——运行时基于函数的执行环境绑定1、全局函数:window2、函数作为某个对象obj的方法调用:obj3、匿名函数:全局性,通常指向window4、修改this作用域:apply()、call()。第一个参数为目标对象;第二个参数:apply接收参数数组,call接受参数值二、闭包1、定义:有权访问另一个函数作用域中变量的函数2、实现:在一个函数内部创建另一个函数3、变量:只能取得包含函数中任何变量的最后一个值,保存的是整个变量对象(典型:for循环中的闭包总是返回最后一个循环的值,无法返回每次循环的值)4、解决:在闭包内部再创建一个匿名函数functionaa(){v
2、arresult;for(vari=0;i<10;i++){result[i]=function(num){//闭包returnfunction(){//闭包中再创建一个函数alert(num);}}(i);}}三、块级作用域(function(){//块级作用域,其中的变量在执行结束后被销毁})();四、创建对象1、简单方式varperson=newObject();person.name=“LL”;person.age=22;问题:创建多个相似对象,大量重复代码2、工厂模式functionPerson(name,age){varo=newObject();o.name=name
3、;o.age=age;o.getName=function(){alert(this.name);}returno;}varperson1=newPerson(“LL”,22);person1.getName();//”LL”(1)根据接受的参数来构建一个包含所有必要信息的Person对象,多次调用,每次返回一个包含两个属性和一个方法的对象。(2)优点:解决了创建多个相似对象的问题问题:对象识别的问题,即怎样知道一个对象的类型解决:构造函数1、构造函数模式functionPerson(name,age){this.name=name;this.age=age;this.getNam
4、e=function(){alert(this.name);};}varperson1=newPerson(“LL”,22);(1)与工厂模式比较a.没有显示的创建对象;b.直接将属性和方法赋值给this对象;c.没有return语句;d.将实例标识为一种特定的类型(instanceof);(2)构造函数与普通函数区别a.习惯:构造函数始终一个大写字母开头,非构造函数以一个小写字母开头b.唯一区别:调用方式不同,用new调用为构造函数,不用new为普通函数(3)Constructor属性:标识对象类型person1.constructor==Person;(4)Instanceof
5、操作符:检测对象类型person1既是Object的实例,也是Person的实例person1instanceofObject==true;person1instanceofPerson==true;(5)问题:每个方法都要在每个实例上重新创建一遍解决:将方法定义在构造函数外部新问题:方法很多——定义很多全局函数——自定义的类型无封装性解决:原型模式2、原型模式functionPerson(){};Person.prototype.name=”LL”;Person.protptype.age=22;Person.prototype.getName=function(){alert(
6、this.name);}varperson1=newPerson();person1.job=“doctor”;alert(person1.name);//“LL”(1)函数的prototype属性:指针,指向一个对象,该对象包含可以由特定类型的所有实例共享的属性和方法。(2)与构造函数区别:不必在构造函数中定义对象实例的信息,将这些信息添加到原型对象中;(3)实例中访问的都是同一组属性和方法(4)原型对象a.函数的prototype(原型)属性:指向函数的原型对象b.constructor(构造函数)属性:包含一个指向prototype属性所在函数的指针Person.protot
7、ype.constructor==Person;c.对象实例只可以访问保存在原型中的值,不可通过对象实例重写原型中的值d.为对象实例添加一个属性时,可屏蔽原型对象中的同名属性,delet可以删除新添加的属性,重新访问原型中的属性值(5)hasOwnProperty()——检测一个属性是在原型中还是实例中,实例中返回trueperson1.hasOwnProperty(“name”)==flase;person1.hasOwnProperty(job)==true;(6
此文档下载收益归作者所有