欢迎来到天天文库
浏览记录
ID:41393953
大小:58.88 KB
页数:5页
时间:2019-08-24
《javascript用函数实现继承详解_javascript技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、一、知识储备:1、枚举属性名称的函数:(1)for...in:口J以在循环体中遍历对象中所有可枚举的属性(包括自有属性和继承属性)(2)Object.keys():返回数组(可枚举的自有属性)(3)Object.getOwnPropertyNames():所有的自有属性3、属性的特性:数据属性和存取器属性(1)数据属性:口J坊(writable)叮枚举(enumerable)口J配置(configurable)值(value)数据屈性只冇一个简单的值;(2)存取器属性:写入(set)读取(get)可枚举(enumerable)可配置(configurabl
2、e)存取器属性不可写(即没有writable特性)。屈性有set方法,那这个屈性是可写的,有get方法,那这个屈性就是可读的。4、定义属性特性的方法:Object.defineProperty(对象,属性,描述符对象)5、获取属性的描述符对象:Object.getOwnPropertyDescriptor(对象,属性)二、示例1、根据for...in的用法,我们可以写出模拟“继承”的方法:varchild={};varmother={ncime:,zzhangzhiying〃,lastAgc:21
3、,sex:女};functionextend(target,source){for(varpinsource){target[p]=source[p];}returntarget;}extend(chi1d,mother);consolc.log(child);//Objcct{name:,zzhangzhiying〃,lastAge:21,sex:女"}〈/STRONG〉2、使用forin来循环遍历原型对象的属性,然后一一赋值给我们的空对象,从而实现了“继承”。这个思路很正确,下面我们來对以上示例进行改造:可以看到代码中使用了一对set,get;其中3gc是一个存取器属性。运行的结果:一个不包含set,get的普通对象。结论:forin实现的“继承”不处理set和get,它把存取器属性(age)转换为一个静态的数据属性。3^给mother对彖设置数据屈性6、xt/javascript〃>varchild={};varmother={name:Z,zhangzhiying/Z,lastAge:21,setage(value){this.lastAge=value;},getage(){returnthis.lastAge+1;},sex:女};Object・defincProperty(mother,,zlastAgc",{writable:false});//把lastAge设置成了不可写mother,age二15;//设置无效,因为lastAge的值不变,所以laslAge+1不变,即age不变functi7、onextend(target,source){for(varpinsource){target[p]=source[p];}returnlargel;}extend(child,mother);console,log(child);//Object{name:,zzhangzhiying,z,lastAge:21,age:22,sex:"女"}child.lastAge=12;//结果显示lastAge改变,说明child.lastAge没有"继承”到mother.lastAge的特性,我们再用getOwnPropertyDesriptor()方法确认一8、下〈BR>console,log(Object.getO
6、xt/javascript〃>varchild={};varmother={name:Z,zhangzhiying/Z,lastAge:21,setage(value){this.lastAge=value;},getage(){returnthis.lastAge+1;},sex:女};Object・defincProperty(mother,,zlastAgc",{writable:false});//把lastAge设置成了不可写mother,age二15;//设置无效,因为lastAge的值不变,所以laslAge+1不变,即age不变functi
7、onextend(target,source){for(varpinsource){target[p]=source[p];}returnlargel;}extend(child,mother);console,log(child);//Object{name:,zzhangzhiying,z,lastAge:21,age:22,sex:"女"}child.lastAge=12;//结果显示lastAge改变,说明child.lastAge没有"继承”到mother.lastAge的特性,我们再用getOwnPropertyDesriptor()方法确认一
8、下〈BR>console,log(Object.getO
此文档下载收益归作者所有