2024年2月21日发(作者:)
JS知识点总结一、对象1、JS的本地对象和内置对象Array创建Array对象的语法:newArray();newArray(size);newArray(element0,element1,element2,...elementn);属性:constructorlength属性可设置或返回数组中元素的数目;prototype方法:concat();方法用于连接两个或多个数组(arrayX,arrayX,...,arrayX);join();方法用于把数组中的所有元素放入一个字符串。(separator);pop();方法用于删除并返回数组的最后一个元素();push();方法可向数组的末尾添加一个或多个元素,并返回新的长度(newelement1,newelement2,...,newelementn);reverse();方法用于颠倒数组中元素的顺序e();shift();方法用于把数组的第一个元素从其中删除,并返回第一个元素的值();slice();方法可从已有的数组中返回选定的元素(start,end);sort();方法用于对数组的元素进行排序(sortby);sortby规定排序顺序,必须是函数splice();方法向/从数组中添加/删除项目,然后返回被删除的项目(index,howmany,item1,...,itemX);toSource();toString();toLocaleString();将数组转为本地字符串leString();unshift();方法可向数组的开头添加一个或更多元素,并返回新的长度t(newelement1,...newelementn);
valueOf();Boolean创建Boolean对象的语法:newBoolean(value);Boolean(value);属性:Constructor属性返回对创建此对象的Boolean函数的引用uctorPrototype属性使您有能力向对象添加属性和方法=value;方法:toSource();方法返回表示对象源代码的字符串ce();toString();方法可把一个逻辑值转为字符串,并返回结果ng();valueOf();方法返回Boolean对象的原始值f();Date创建Date对象的语法varmydate=newDate();属性:constructorprototype方法:Date();方法可返回当天的日期和时间getDate();方法可返回月份的某一天getDay();方法可返回表述星期的某一天的数字getMonth();方法可返回表示月份的数字getFullYear();方法可返回一个表示年份的4位数字getYear();方法可返回表示年份的两位或四位数字,使用上面的方法替代getHours();方法返回时间的小时字段getMinutes();方法返回时间的分钟字段getSeconds();方法返回时间的秒getMilliseconds();方法返回时间的毫秒getTime();方法可返回距1970年1月1日之间的毫秒数getTimezoneOffset();方法可返回格林威治时间和本地时间之间的时差,以分钟为单位getUTCDate();getUTCDay();getUTCMonth();getUTCFullYear();getUTCHours();getUTCMinutes();
getUTCSeconds();getUTCMilliseconds();parse();方法可解析一个日期时间字符,并返回1970/1/1午夜距离该日期时间的毫秒数setDate();setMonth();setFullYear();setYear();setHours();setMinutes();setSeconds();setMilliseconds();setTime();setUTCDate();setUTCMonth();setUTCFullYear();setUTCHours();setUTCMinutes();setUTCSeconds();setUTCMilliseconds();toSource();toString();toTimeString();方法可把Date对象的时间部分转换为字符串,并返回结果toDateString();方法可把Date对象的日期部分转换为字符串,并返回结果toGMTString();toUTCString();toLocaleString();toLocaleTimeString();toLocaleDateString();UTC();方法可根据世界时返回1970/1/1到指定日期的毫秒数(year,month,day,hours,minutes,seconds,ms);valueOf();MathMath对象用于执行数学任务使用Math的属性和方法的语法:varpi_value=;varsqrt_value=(15);属性:E:返回算术常量e,即自然数对数的底数(约等于2.718)LN2:返回2的自然对数LN10:返回10的自然对数LOG2E:返回以2为底的e的对数
LOG10E:返回以10为底的e的对数PI:返回圆周率SQRT1_2:返回2的平方根的倒数SQRT2:返回2的平方根方法:abs(x);返回数的绝对值acos(x);返回数的反余弦值asin(x);返回数的反正弦值atan(x);以介于-PI/2与PI/2弧度之间的数值来返回x的反正切值atan2(y,x);返回从x轴到点(x,y)的角度(介于-PI/2与PI/2弧度之间)ceil(x);对数进行上舍入cos(x);返回数的余弦exp(x);返回e的指数floor(x);对数进行下舍入log(x);返回数的自然对数(底为e)max(x,y);返回x和y中的最大值min(x,y);返回x和y中的最小值pow(x,y);返回x的y次幂random();返回0~1之间的随机数round(x);把数四舍五入为最接近的整数sin(x);返回数的正弦sqrt(x);返回数的平方根tan(x);返回角的正切toSource();返回该对象的源代码valueOf();返回Math对象的原始值Number创建Number对象的语法varmynum=newNumber(value);varmynum=Number(value);属性:constructor:返回对创建此对象的Number函数的应用MAX_VALUE:可表示的最大数MIN_VALUE:可表示的最小数NaN:非数字值NEGATIVE_INFINITY:负无穷大,溢出时返回该值POSITIVE_INFINITY:正无穷大,溢出时返回该值Prototype:使您有能力向对象添加属性和方法方法:toString();toLocaleString();toFixed();方法可把Number四舍五入为指定小数位数的数字toExponential();方法把对象的值转换成指数计数法toPrecision();方法可在对象的值超出指定位数时将其转换为指数计数法
valueOf();StringString对象用于处理文本(字符串)创建String对象的语法:newString(s);String(s);属性:constructorlength:字符串的长度prototype方法:anchor();方法用于创建HTML锚(anchorname);big();方法用于把字符串显示为大号字体blink();方法用于显示闪动的字符串bold();方法用于把字符串显示为粗体charAt();方法可返回指定位置的字符(index);charCodeAt();方法可返回指定位置的字符的Unicode编码concat();方法用于连接两个或多个字符串fixed();方法用于把字符串显示为打字机字体fontcolor();方法用于按照指定的颜色来显示字符串fontsize();方法用于按照指定的尺寸来显示字符串fromCharCode();可接受一个或多个指定的Unicode值,然后返回一个字符串indexOf();方法可返回某个指定的字符串值在字符串中首次出现的位置italics();使用斜体字显示字符串lastIndexOf();从后向前搜索字符串link();将字符串显示为链接localeCompare();用本地特定的顺序来比较两个字符串match();找到一个或多个正则表达式的匹配replace();替换与正则表达式匹配的子串search();检索与正则表达式相匹配的值slice();提取字符串的片段,并在新的字符串中返回被提取的部分small();使用小字号来显示字符串split();把字符串分割为字符数组strike();使用删除线来显示字符串sub();把字符串显示为下标substr();从起始索引号提取字符串中指定数目的字符substring();提取字符串中两个指定的索引号之间的字符sup();把字符串显示为上标toLocaleLowerCase();把字符串转换为小写toLocaleUpperCase();把字符串转换为大写
toLowerCase();toUpperCase();toSource();toString();valueOf();RegExpRegExp对象表示正则表达式,它是对字符串执行模式匹配的强大工具直接量语法/pattern/attributes创建RegExp对象的语法:newRegExp(pattern,attributes);修饰符i:执行对大小写不敏感的匹配g:执行全局匹配m:执行多行匹配方括号用于查找某个范围内的字符[abc]:查找方括号之间的任何字符[^abc]:查找任何不在方括号之间的字符[0-9]:查找任何从0-9的数字[a-z]:查找任何从小写a到小写z的字符[A-Z]:查找任何大写A到大写Z的字符[A-z]:查找任何从大写A到小写z的字符[adgk]:查找给定集合内的任何字符[^adgk]:查找给定集合外的任何字符[red|blue|green]:查找任何指定的选项元字符元字符是拥有特殊含义的字符.:查找单个字符,除了换行和行结束符w:查找单词字符W:查找非单词字符d:查找数字D:查找非数字s:查找空白字符S:查找非空白字符b:匹配单词边界B:匹配非单词边界0:查找NUL字符n:查找换行符f:查找换页符r:查找回车符t:查找制表符v:查找垂直制表符
xxx:查找以八进制数xxx规定的字符xdd:查找以十六进制数dd规定的数字uxxxx:查找以十六进制数xxxx规定的Unicode字符量词n+:匹配任何包含至少一个n的字符串n*:匹配任何包含零个或多个n的字符串n?:匹配任何包含零个或一个n的字符串n{x}:匹配包含x个n的序列的字符串n{x,y}:匹配包含x至y个n的序列的字符串n{x,}:匹配包含至少x个n的序列的字符串n$:匹配任何结尾为n的字符串^n:匹配任何开头为n的字符串?=n:匹配任何其后紧接指定字符串n的字符串?!n:匹配任何气候没有紧接指定字符串n的字符串属性:global:RegExp对象是否具有标志gignoreCase:RegExp对象是否具有标志ilastIndex:一个整数,标识开始下一次匹配的字符位置multiline:RegExp对象是否具有标志msource:正则表达式的源文本方法:compile:编译正则表达式exec:方法用于检索字符串中的正则表达式的匹配test:方法用于检测一个字符串是否匹配某个模式Global全局属性和函数可用于所有内建的JavaScript对象顶层函数(全局函数)decodeURI();解码某个编码的URIdecodeURIComponent();解码一个编码的URI组件encodeURI();把字符串编码为URIencodeURIComponent();把字符串编码为URI组件escape();对字符串进行编码eval();计算JavaScript字符串,并把它作为脚本代码来执行getClass();返回一个JavaObject的JavaClassisFinite();检查某个值是否为有穷大的数isNaN();检查某个值是否是数字Number();把对象的值转换为数字parseFloat();解析一个字符串并返回浮点数parseInt();解析一个字符串并返回一个整数String();把对象的值转换为字符串Unescape();对由escape()编码的字符串进行解码顶层属性(全局属性)Infinity:代表正的无穷大的数值java:代表java.*包层级的一个JavaPackage
NaN:指示某个值是不是数字Packages:根JavaPackage对象undefined:指示未定义的值Events事件通常与函数配合使用,这样就可以通过发生的事件来驱动函数执行事件句柄onabort:图像加载被中断onblur:元素失去焦点onchange:用户改变域的内容onclick:鼠标点击某个对象ondblclick:鼠标双击某个对象onerror:当加载文档或图像时发生某个错误onfocus:元素获得焦点onkeydown:某个键盘的键被按下onkeypress:某个键盘的键被按下或按住onkeyup:某个键盘的键被松开onload:某个页面或图像被完成加载onmousedown:某个鼠标按键被按下onmousemove:鼠标被移动onmouseout:鼠标从某元素移开onmouseover:鼠标被移到某个元素之上onmouseup:某个鼠标按键被松开onreset:重置按钮被点击onresize:窗口或框架被调整尺寸onselect:文本被选定onsubmit:提交按钮被点击onunload:用户退出页面2、Brower对象(BOM)WindowWindow对象表示浏览器中打开的窗口如果文档中包含框架(frame或iframe标签),浏览器会为HTML文档创建一个window对象,并为每个框架创建一个额外的window对象Window对象集合Frames[]:返回窗口中所有命名的框架。属性:closed:返回窗口是否已被关闭defaultStatus:设置或返回窗口状态栏中的默认文本document:对Document对象的只读引用history:对History对象的只读引用innerheight:返回窗口的文档显示区的高度innerwidth:返回窗口的文档显示区的宽度length:设置或返回窗口中的框架数量location:用于窗口或框架的Location对象
name:设置或返回窗口的名称Navigator:对Navigator对象的只读引用opener:返回对创建此窗口的窗口的引用outerheight:返回窗口的外部高度outerwidth:返回窗口的外部宽度pageXOffset:设置或返回当前页面相对于窗口显示区左上角的X位置pageYOffset:设置或返回当前页面相对于窗口显示区左上角的Y位置parent:返回父窗口Screen:返回Screen对象的只读引用self:返回对当前窗口的引用status:设置窗口状态栏的文本top:返回最顶层的先辈窗口window:window属性等价于self属性,它包含了对窗口自身的引用screenLeft:screenTop:只读整数。声明了窗口的左上角在屏幕上的x坐标和y坐标screenX:screenY:方法:alert();显示带有一段消息和一个确认按钮的警告框blur();把键盘焦点从顶层窗口移开clearInterval();取消由setInterval()设置的timeoutclearTimeout();取消由setTimeout()设置的timeoutclose();关闭浏览器窗口confirm();显示带有一段消息以及确认按钮和取消按钮的对话框createPopup();创建一个pop-up窗口focus();把键盘焦点给予一个窗口moveBy();可相对于窗口的当前坐标把它移动指定的像素moveTo();把窗口的左上角移动到一个个指定的坐标open();打开一个新的浏览器窗口或查找一个已命名的窗口print();打印当前窗口的内容prompt();显示可提示用户输入的对话框resizeBy();按照指定的像素调整窗口的大小resizeTo();把窗口的大小调整到指定的宽度和高度scrollBy();按照指定的像素值来滚动内容scrollTo();把内容滚动到指定的坐标setInterval();按照指定的周期(以毫秒记)来调用函数或计算表达式setTimeout();在指定的毫秒后调用函数或计算表达式NavigatorNagivator对象包含有关浏览器的信息Navigator对象集合plugins[]:返回对文档中所有嵌入式对象的引用该集合是一个Plugin对象的数组,其中的元素代表浏览器已经安装的插件
属性:appCodeName:返回浏览器的代码名appMinorVersion:返回浏览器的次级版本appName:返回浏览器的名称appVersion:返回浏览器的平台和版本信息browserLanguage:返回当前浏览器的语言cookieEnabled:返回指明浏览器中是否启用cookie的布尔值cpuClass:返回浏览器系统的cpu等级onLine:返回指明系统是否处于脱机模式的布尔值platform:返回运行浏览器的操作系统平台systemLanguage:返回OS使用的默认语言userAgent:返回由客户机发送服务器的user-agent头部的值userLanguage:返回OS的自然语言设置方法:javaEnabled();规定浏览器是否启用javataintEnabled();规定浏览器是否启用数据污点(datatainting)ScreenScreen对象包含有关客户端显示屏幕的信息属性:availHeight:返回显示屏幕的高度(除windows任务栏之外)availWidth:返回显示屏幕的宽度(除windows任务栏之外)bufferDepth:设置或返回调色板的比特深度colorDepth:返回目标设备或缓冲器上的调色板的比特深度deviceXDPI:返回显示屏幕的每英寸水平点数deviceYDPI:返回显示屏幕的每英寸垂直点数fontSmoothingEnabled:返回用户是否在显示控制面板中启用了字体平滑height:返回显示屏幕的高度logicalXDPI:返回显示屏幕每英寸的水平方向的常规点数logicalYDPI:返回显示屏幕每英寸的垂直方向的常规点数pixelDepth:返回显示屏幕的颜色分辨率(比特每像素)updateInterval:设置或返回屏幕的刷新率width:返回显示屏幕的宽度HistoryHistory对象包含用户(在浏览器窗口中)访问过的URLHistory对象是Window对象的一部分,可通过y属性对其进行访问属性:length:返回浏览器历史列表中的URL数量方法:back();加载history列表中的前一个URLforward();加载history列表中的下一个URLgo();加载history列表中的某个具体页面
LocationLocation对象包含有关当前URL的信息Location对象是Window对象的一个部分,可通过on属性来访问属性:hash:设置或返回从#号开始的URL锚host:设置或返回主机名和当前URL的端口号hostname:设置或返回当前URL的主机名href:设置或返回完整的URLpathname:设置或返回当前URL的路径部分port:设置或返回当前URL的端口号protocol:设置或返回当前URL的协议search:设置或返回从?开始的URL(查询部分)方法:assign();加载新的文档reload();重新加载当前文档replace();用心的文档替换当前文档3、HTML对象(DOM)Document每个载入浏览器的HTML文档都会成为Document对象Document对象使我们可以从脚本中对HTML页面中的所有元素进行访问Document对象集合all[]:提供对文档中所有HTML元素的访问anchor[]:返回对文档中所有Anchor对象的引用applets[]:返回对文档中所有Applet对象的引用forms[]:返回对文档中所有Form对象的引用images[]:返回对文档中所有Image对象的引用links[]:返回对文档中所有Area和Link对象的引用属性:body:提供对
元素的直接访问cookie:设置或返回与当前文档有关的所有cookiedomain:返回当前文档的域名lastModified:返回文档被最后修改的日期和时间referrer:返回载入当前文档的文档的URLtitle:返回当前文档的标题URL:返回当前文档的URL方法:close();关闭用()方法打开的输出流,并显示选定的数据getElementById();返回对拥有指定id的第一个对象的引用getElementsByName();返回带有指定名称的对象的集合getElementsByTagName();返回带有指定标签的对象的集合open();打开一个流,以收集来自任何()或n()方法的输出write();向文档写HTML表达式或JavaScript代码writeIn();等同于write()方法,不同的是在每个表达式之后写一个换行符Element在HTMLDOM中,每个部分都是节点:文档本身是文档节点所有HTML元素是元素节点所有HTML属性是属性节点HTML元素内的文本是文本节点注释是注释节点Element对象在HTMLDOM中,Element对象表示HTML元素Element对象可以拥有类型为元素节点、文本节点、注释节点的子节点NodeList对象表示节点列表元素也可以拥有属性,属性是属性节点属性:accessKey:设置或返回元素的快捷键attributes:返回元素属性的NamedNodeMapchildNodes:返回元素子节点的NodeListclassName:设置或返回元素的class属性clientHeight:返回元素的可见高度clientWidth:返回元素的可见宽度contentEditable:设置或返回元素的内容是否可编辑dir:设置或返回元素的文本方向firstChild:返回元素的首个子元素id:设置或返回元素的idinnerHTML:设置或返回元素的内容isContentEditable:判断元素的内容是否可编辑lang:设置或返回元素的语言代码lastChild:返回元素的最后一个子元素namespaceURI:返回元素的namespaceURInextSibling:返回位于相同节点树层级的下一个节点nodeName:返回元素的名称nodeType:返回元素的节点类型nodeValue:设置或返回元素的值offsetHeight:返回元素的高度offsetWidth:返回元素的宽度offsetLeft:返回元素的水平偏移位置offsetParent:返回元素的偏移容器offsetTop:返回元素的垂直偏移位置ownerDocument:返回元素的根元素(文档对象)parentNode:返回元素的父节点
previousSibling:返回位于相同节点树层级的前一个元素scrollHeight:返回元素的整体高度scrollLeft:返回元素左边缘与视图之间的距离scrollTop:返回元素上边缘与视图之间的距离scrollWidth:返回元素的整体宽度style:设置或返回元素的style属性tabIndex:设置或返回元素的tab键控制次序tagName:返回元素的标签名textContent:设置或返回节点及其后代的文本内容title:设置或返回元素的title属性length:返回NodeList中的节点数方法:appendChild();向元素添加新的子节点,作为最后一个子节点cloneNode();克隆元素compareDocumentPosition();比较两个元素的文档位置getAttribute();返回元素节点的指定属性getAttributeNode();返回指定的属性节点getElementsByTagName();返回拥有指定标签名的所有子元素的结合getFeature();返回实现了指定特性的API的某个对象getUserData();返回关联元素上键的对象hasAttribute();如果元素拥有指定属性,则返回true,否则返回falsehasAttributes();如果元素拥有属性,返回true,否则返回falsehasChildNodes();如果元素拥有子节点,返回true,否则返回falseinsertBefore();在指定的已有的子节点之前插入新节点isDefaultNamespace();如果指定的namespaceURI是默认的,返回true,否则返回falseisEqualNode();检查两个元素是否相等isSameNode();检查两个元素是否是相同的节点isSupported();如果元素支持指定特性,返回truenormalize();合并元素中相邻的文本节点,并移除空的文本节点removeAttribute();从元素中移除指定属性removeAttributeNode();移除指定的属性节点,并返回被移除的节点removeChild();从元素中移除子节点replaceChild();替换元素中的子节点setAttribute();把指定属性设置或更改为指定值setAttributeNode();设置或更改指定属性节点setIdAttribute();setIdAttributeNode();setUserData();把对象关联到元素上的键toString();把元素转换为字符串item();返回NodeList中位于指定下标的节点
AttributeAttr对象在HTMLDOM中,Attr对象表示HTML属性HTML属性始终属于HTML元素NamedNodeMap对象在HTMLDOM中,NamedNodeMap对象表示元素属性节点的无序集合。NamedNodeMap中的节点可通过名称或索引来访问属性:isId:如果属性是id类型,返回true,否则返回falsename:返回属性的名称value:设置或返回属性的值specofied:如果已指定属性,返回true,否则返回falselength:返回NamedNodeMap中的节点数方法:getNamedItem();从NamedNodeMap返回指定的属性节点item();返回NamedNodeMap中位于指定下标的节点removeNamedItem();移除指定的属性节点setNamedItem();设置指定的属性节点EventEvent对象代表事件的状态,比如事件在其中发生的元素、键盘按键的状态、鼠标的位置、鼠标按钮的状态。事件通常与函数结合使用,函数不会在事件发生前被执行。事件句柄:同javascript事件句柄鼠标/键盘属性altKey:返回当事件被触发时,“ALT”是否被按下button:返回当事件被触发时,哪个鼠标按钮被点击clientX:返回当事件被触发时,鼠标指针的水平坐标clientY:返回当事件被触发时,鼠标指针的垂直坐标ctrlKey:返回当事件被触发时,“CTRL”键是否被按下metaKey:返回当事件被触发时,“meta”键是否被按下relatedTarget:返回与事件的目标相关的节点screenX:返回当事件被触发时,鼠标指针的水平坐标screenY:返回当事件被触发时,鼠标指针的垂直坐标shiftKey:返回当事件被触发时,“SHIFT”键是否被按下JavaScript实现JavaScript的核心ECMAScript描述了该语言的语法和基本对象DOM描述了处理网页内容的方法和接口BOM描述了与浏览器进行交互的方法和接口ECMAScript语法区分大小写变量是弱类型的每行结尾的分号可有可无
注释与Java、C和PHP语言的注释相同括号表示代码块ECMAScript变量使用var运算符声明变量变量命需要遵守一些简单的规则ECMAScript关键字ECMAScript保留字ECMAScript值在ECMAScript中,变量可以存在两种类型的值,即原始值和引用值原始值存储在栈中的简单数据段,也就是说,它们的值直接存储在变量访问的位置引用值存储在堆中的对象,也就是说,存储在变量处的值是一个指针,指向存储对象的内存处ECMAScript原始类型:Undefined,Null,Boolean,Number,StringECMAScript引用类型ECMAScript中的所有对象都由Object对象继承而来,Object对象中的所有属性和方法都会出现在其他对象中。Object对象具有下列属性constructor对创建对象的函数的引用。对于Object对象,该指针指向原始的Object()函数Prototype对该对象的对象原型的引用。对于所有的对象,它默认返回Object对象的一个实例Object对象还具有几个方法:hasOwnProperty(property);判断对象是否有某个特定的属性。必须用字符串指定该属性。IsPrototypeOf(object);判断该对象是否为另一个对象的原型PropertyIsEnumerable判断给定的属性是否可以用in语句进行枚举ToString();返回对象的原始字符串表示。对于Object对象,ECMA-262没有定义这个值,所以不同的ECMAScript实现具有不同的值ValueOf();返回最适合该对象的原始值。对于许多对象,该方法返回的值都与ToString()的返回值相同ECMAScript函数函数是ECMAScript的核心函数是由这样的方式进行声明的:关键字function、函数名、一组参数、以及置于括号中的待执行代码。
函数的基本语法:functionfunctionName(arg0,arg1,...argn){statements}函数调用函数可以通过其名字上加上括号中的参数进行调用,如果有多个参数函数返回值函数有返回值,也不用明确的声明它。函数只需要使用return运算符后跟返回的值即可ECMAScriptarguments对象在函数代码中,使用特殊对象arguments,开发者无需明确指出参数名,就能访问它们。用arguments[0]访问参数的第一个值返回参数的个数ECMAScriptFunction对象(类)ECMAScript的函数实际上是功能完整的对象Function对象(类)Function类可以表示开发者定义任何函数用Function类直接创建函数的语法如下:varfunction_name=newfunction(arg1,arg2,...argn,function_body);在上面的形式中,每个arg都是一个参数,最后一个参数是函数主体(要执行的代码),这些参数必须是字符串。ECMAScript闭包(closure)闭包,指的是词法表示包括不被计算的变量的函数,也就是说,函数可以使用函数之外定义的变量。ECMAScript面向对象在ECMAScript中,对象由特性构成,特性可以是原始值,也可以是引用值。如果特性存放的是函数,它将被看作对象的方法,否则该特性被看作对象的属性ECMAScript对象应用对象的创建和销毁都在JavaScript执行过程中发生,理解这种范式的含义对理解整个语言至关重要声明和实例化对象的创建方式是用关键字new后面跟上实例化的类的名字varoObject=newObject();对象的引用在ECMAScript中,不能访问对象的物理表示,只能访问对象的引用。每次创建对象,存储在变量中的都是该对象的引用,而不是对象本身。对象废除把对象的所有引用都设置为null,可以强制性的废除对象早绑定和晚绑定所谓绑定,即把对象的接口与对象实例结合在一起的方法早绑定是指在实例化对象之前定义它的属性和方法,这样编译器或解释程序就能够提前转换机器代码。在Java中,有了早绑定,就可以在开发环境中使用IntelliSense。
ECMAScript不是强类型语言,所以不支持早绑定另一方面,晚绑定指的是编译器或解释程序在运行前,不知道对象的类型。使用晚绑定,无需检查对象的类型,只需检查对象是否支持属性和方法即可。ECMAScript中的所有变量都采用晚绑定的方法。这样就允许执行大量的对象操作,而无任何惩罚ECMAScript对象类型在ECMAScript中,所有对象并非同等创建的一般来说,可以创建并使用的对象有三种:本地对象、内置对象和宿主对象本地对象独立于宿主环境的ECMAScript实现提供的对象简单来说,本地对象就是ECMA-262定义的类。包括:ObjectFunctionArrayStringBooleanNumberDateRegExpErrorEvalErrorRangeErrorReferenceErrorSyntaxErrorTypeErrorURIError内置对象由ECMAScript实现提供的、独立于宿主环境的所有对象,在ECMAScript程序开始执行时出现。开发者不必明确实例化内置对象,它已被实例化了。ECMA-262只定义了两个内置对象:GlobalMath宿主对象所有非本地对象都是宿主对象,即由ECMAScript实现的宿主环境提供的对象所有BOM和DOM对象都是宿主对象ECMAScript对象作用域作用域指的是变量的适用范围公用、私有和受保护作用域ECMAScript只有公用作用域this关键字
ECMAScript定义类或对象使用预定义对象只是面向对象语言能力的一部分,它真正强大之处在于能够创建自己专用的类和对象ECMAScript拥有很多创建对象或类的方法。工厂方式原始的方式因为对象的属性可以在对象创建后动态定义varobj=newObject();="hello";=28;=function(){alert(+);};在上面的代码中,创建对象obj,然后给它设置几个属性,最后一个属性实际上是指向函数的指针,意味着该属性是个方法。执行这段代码后,就可以使用对象obj这里有一个问题,就是可能需要创建多个obj的实例。解决方案:工厂方式要解决该问题,开发者创造了能创建并返回特定类型的对象的工厂函数。如:functioncreateCar(){varcar=newObject();="blue";="ss";=30;=function(){alert(++);};returncar;}varcar1=createCar();varcar2=createCar();在这里所有的代码都包含在createCar()函数中。并返回car最为函数值。调用此函数将创建新对象,并赋予它所有必要的属性,复制出一个对象。因此通过这种方法,我们很容易创建car对象的两个版本,它们的属性完全一样。为函数传递参数我们还可以修改函数的参数,给每个属性传递默认值,而不是简单的赋予属性默认值。functioncreateCar(icolor,imodel,iweight){varcar=newObject();=icolor;=imodel;=iweight;=function(){
alert(++);};returncar;}varcar1=createCar("green","hh",30);varcar2=createCar("red","gg",40);();();上面的对象具有相同的属性,却又不同的属性值在工厂函数外定义对象的方法上面的创建对象,每次创建对象都要创建新的函数start(),意味着每个对象都有自己的start()版本。而事实上,每个对象都共享同一个函数。有些开发者在工厂函数外定义对象的方法,然后通过属性指向该方法,从而避免这个问题:functionstart(){alert(++);}functioncreateCar(icolor,imodel,iweight){varcar=newObject();=icolor;=imodel;=iweight;=start;returncar;}varcar1=createCar("green","hh",30);varcar2=createCar("red","gg",40);();();上面的代码,从功能上讲,解决了重复创建函数对象的问题,但是从语义上讲,该函数不太像是对象的方法。所有这些问题都引发了开发者定义的构造函数的出现。构造函数方式:创建构造函数就像创建工厂函数一样容易。第一步:选择类名,即构造函数的名字。根据惯例这个名字的首字母大写,以使它与首字母小写的变量名分开。除了这点不同,构造函数看起来很像工厂函数。functionCar(icolor,imodel,iweight){=icolor;=imodel;=iweight;=function(){alert(++);};
}varcar1=newCar("green","hh",30);varcar2=newCar("red","gg",40);();();上面代码与工厂方式的区别:1、在构造函数内没有创建对象,而是使用this关键字。使用new运算符构造函数时,在执行第一行代码前先创建一个对象,只有用this才能访问该对象。2、可以直接赋予this属性,默认情况下是构造函数的返回值。就像工厂函数,构造函数会重复生成函数,为每个对象都创建独立的函数版本。不过与工厂函数类似,也可以用外部函数重写构造函数,同样的,这么做语义上无任何意义。原型方式:该方式利用了对象的prototype属性,可以把它看成创建对象所依赖的原型。首先用空构造函数来设置类名。然后所有的属性和方法都被直接赋予prototype属性。functionCar(){}="green";="qq";=30;=function(){alert(++);};varcar1=newCar();varcar2=newCar();原型方式的问题1、构造函数没有参数。使用原型方式,不能通过给构造函数传递参数来初始化属性的值。意味着必须在对象创建后才能改变属性的默认值。2、真正的问题是属性指向的是对象,而不是函数时,函数共享不会造成问题,但对象却很少被多个实例共享。functionCar(){}="blue";=4;=25;s=newArray("Mike","John");
lor=function(){alert();};varoCar1=newCar();varoCar2=newCar();("Bill");alert(s);alert(s);//输出"Mike,John,Bill"//输出"Mike,John,Bill"混合的构造函数/原型方式联合使用构造函数和原型方式,就可像其他程序设计语言一样创建对象。这种概念非常简单,即用构造函数定义对象的所有非函数属性,用原型方式定义对象的函数属性。结果是所有函数都只创建一次,而每个对象都具有自己的对象属性实例。functionCar(icolor,imodel,iweight){=icolor;=imodel;=iweight;=newArray("hello","world");}=function(){alert(+++);};varcar1=newCar("green","ff",30);varcar2=newCar("blue","dd",40);("before");();();这种方式是ECMAScript采用的主要方式,它具有其他方式的特性,却没有他们的副作用。动态原型方法动态原型方法的基本想法与混合的构造函数/原型方式相同,即在构造函数内定义非函
数属性,而函数属性则利用原型属性定义。唯一的区别是赋予对象方法的位置。functionCar(sColor,iDoors,iMpg){=sColor;=iDoors;=iMpg;s=newArray("Mike","John");if(typeofCar._initialized=="undefined"){lor=function(){alert();};Car._initialized=true;}}ECMAScript修改对象通过使用ECMAScript,不仅可以创建对象,还可以修改已有对象的行为。prototype属性不仅可以定义构造函数的属性和方法,还可以为本地对象添加属性和方法。创建新方法:可以用prototype属性为任何已有的类定义新方法。重命名已有的方法添加与已有方法无关的方法为本地对象添加新方法重定义已有方法极晚绑定


发布评论